diff --git a/.github/workflows/test-suite-docker-build.yml b/.github/workflows/test-suite-docker-build.yml index 1fb4a374f..eb1714cd6 100644 --- a/.github/workflows/test-suite-docker-build.yml +++ b/.github/workflows/test-suite-docker-build.yml @@ -1,6 +1,18 @@ name: test-suite-docker-build on: + workflow_dispatch: + inputs: + ref: + description: 'Branch/ref to build' + required: false + default: 'main' + type: string + trigger_source: + description: 'Source that triggered this workflow' + required: false + default: 'manual' + type: string pull_request: push: branches: diff --git a/.github/workflows/test-suite-e2e-tests-mq.yml b/.github/workflows/test-suite-e2e-tests-mq.yml new file mode 100644 index 000000000..6cab7aba2 --- /dev/null +++ b/.github/workflows/test-suite-e2e-tests-mq.yml @@ -0,0 +1,248 @@ +name: test-suite-e2e-tests-mq + +on: + workflow_dispatch: + inputs: + coprocessor: + description: "Coprocessor versions array: [db_migration, gw_listener, host_listener, tx_sender, tfhe_worker, sns_worker, zkproof_worker]" + default: "[]" + type: string + gateway: + description: "Gateway version" + default: "" + type: string + host: + description: "Host version" + default: "" + type: string + connector: + description: "Connector versions array: [db_migration, gw_listener, tx_sender, kms_worker]" + default: "[]" + type: string + test-suite: + description: "Test suite version" + default: "" + type: string + relayer: + description: "Relayer version" + default: "" + type: string + kms-core: + description: "KMS Core version" + default: "" + type: string + pull_request: + branches: + - main + +permissions: {} + +# Allow to run multiple instances of the same workflow in parallel when triggered manually +concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name == 'workflow_dispatch' && github.run_id || 'auto' }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +jobs: + check-changes: + name: test-suite-e2e-tests-mq/check-changes + permissions: + actions: 'read' # Required to read workflow run information + contents: 'read' # Required to checkout repository code + pull-requests: 'read' # Required to read pull request information + runs-on: ubuntu-latest + outputs: + changes-fhevm: ${{ steps.filter.outputs.fhevm }} + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 + id: filter + with: + filters: | + fhevm: + - 'test-suite/fhevm/**' + fhevm-e2e-test: + name: test-suite-e2e-tests-mq/fhevm-e2e-test (bpr) + needs: check-changes + if: ${{ needs.check-changes.outputs.changes-fhevm == 'true' || github.event_name == 'release' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'mergify/merge-queue/') }} + permissions: + contents: 'read' # Required to checkout repository code + id-token: 'write' # Required for OIDC authentication + packages: 'read' # Required to read GitHub packages/container registry + + runs-on: large_ubuntu_32 + steps: + - name: Checkout code + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: 'false' + + - name: Setup Docker + uses: docker/setup-buildx-action@d70bba72b1f3fd22344832f00baa16ece964efeb # v3.3.0 + + - name: Login to GitHub Container Registry + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GHCR_READ_TOKEN }} + + - name: Login to Chainguard Registry + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 + with: + registry: cgr.dev + username: ${{ secrets.CGR_USERNAME }} + password: ${{ secrets.CGR_PASSWORD }} + + - name: Parse component versions + id: parse-versions + run: | + echo "šŸ”§ Parsing component versions..." + + # Parse coprocessor array (7 elements) + coprocessor_input='${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.coprocessor || '[]' }}' + if [[ "${coprocessor_input}" != "[]" && -n "${coprocessor_input}" ]]; then + echo "šŸ“Š Coprocessor array: ${coprocessor_input}" + + db_migration_version=$(echo "${coprocessor_input}" | jq -r '.[0] // empty') + gw_listener_version=$(echo "${coprocessor_input}" | jq -r '.[1] // empty') + host_listener_version=$(echo "${coprocessor_input}" | jq -r '.[2] // empty') + tx_sender_version=$(echo "${coprocessor_input}" | jq -r '.[3] // empty') + tfhe_worker_version=$(echo "${coprocessor_input}" | jq -r '.[4] // empty') + sns_worker_version=$(echo "${coprocessor_input}" | jq -r '.[5] // empty') + zkproof_worker_version=$(echo "${coprocessor_input}" | jq -r '.[6] // empty') + + [[ -n "${db_migration_version}" ]] && echo "DB_MIGRATION_VERSION_OVERRIDE=${db_migration_version}" >> "$GITHUB_ENV" + [[ -n "${gw_listener_version}" ]] && echo "GW_LISTENER_VERSION_OVERRIDE=${gw_listener_version}" >> "$GITHUB_ENV" + [[ -n "${host_listener_version}" ]] && echo "HOST_LISTENER_VERSION_OVERRIDE=${host_listener_version}" >> "$GITHUB_ENV" + [[ -n "${tx_sender_version}" ]] && echo "TX_SENDER_VERSION_OVERRIDE=${tx_sender_version}" >> "$GITHUB_ENV" + [[ -n "${tfhe_worker_version}" ]] && echo "TFHE_WORKER_VERSION_OVERRIDE=${tfhe_worker_version}" >> "$GITHUB_ENV" + [[ -n "${sns_worker_version}" ]] && echo "SNS_WORKER_VERSION_OVERRIDE=${sns_worker_version}" >> "$GITHUB_ENV" + [[ -n "${zkproof_worker_version}" ]] && echo "ZKPROOF_WORKER_VERSION_OVERRIDE=${zkproof_worker_version}" >> "$GITHUB_ENV" + fi + + # Parse gateway string + gateway_input='${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.gateway || '' }}' + [[ -n "${gateway_input}" ]] && echo "GATEWAY_VERSION_OVERRIDE=${gateway_input}" >> "$GITHUB_ENV" + + # Parse host string + host_input='${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.host || '' }}' + [[ -n "${host_input}" ]] && echo "HOST_VERSION_OVERRIDE=${host_input}" >> "$GITHUB_ENV" + + # Parse connector array (4 elements) + connector_input='${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.connector || '[]' }}' + if [[ "${connector_input}" != "[]" && -n "${connector_input}" ]]; then + echo "šŸ“Š Connector array: ${connector_input}" + + connector_db_migration=$(echo "${connector_input}" | jq -r '.[0] // empty') + connector_gw_listener=$(echo "${connector_input}" | jq -r '.[1] // empty') + connector_tx_sender=$(echo "${connector_input}" | jq -r '.[2] // empty') + connector_kms_worker=$(echo "${connector_input}" | jq -r '.[3] // empty') + + [[ -n "${connector_db_migration}" ]] && echo "CONNECTOR_DB_MIGRATION_VERSION_OVERRIDE=${connector_db_migration}" >> "$GITHUB_ENV" + [[ -n "${connector_gw_listener}" ]] && echo "CONNECTOR_GW_LISTENER_VERSION_OVERRIDE=${connector_gw_listener}" >> "$GITHUB_ENV" + [[ -n "${connector_tx_sender}" ]] && echo "CONNECTOR_TX_SENDER_VERSION_OVERRIDE=${connector_tx_sender}" >> "$GITHUB_ENV" + [[ -n "${connector_kms_worker}" ]] && echo "CONNECTOR_KMS_WORKER_VERSION_OVERRIDE=${connector_kms_worker}" >> "$GITHUB_ENV" + fi + + # Parse test-suite string + test_suite_input='${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.test-suite || '' }}' + [[ -n "${test_suite_input}" ]] && echo "TEST_SUITE_VERSION_OVERRIDE=${test_suite_input}" >> "$GITHUB_ENV" + + # Parse relayer string + relayer_input='${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.relayer || '' }}' + [[ -n "${relayer_input}" ]] && echo "RELAYER_VERSION_OVERRIDE=${relayer_input}" >> "$GITHUB_ENV" + + # Parse kms-core string + kms_core_input='${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.kms-core || '' }}' + [[ -n "${kms_core_input}" ]] && echo "KMS_CORE_VERSION_OVERRIDE=${kms_core_input}" >> "$GITHUB_ENV" + + + echo "Component versions: gateway:${gateway_input}, host:${host_input}, coprocessor:${coprocessor_input}, connector:${connector_input}, test-suite:${test_suite_input}, relayer:${relayer_input}, kms-core:${kms_core_input}" + echo "āœ… Component versions parsed successfully" + + - name: Deploy fhevm Stack + working-directory: test-suite/fhevm + env: + # Coprocessor components + DB_MIGRATION_VERSION: ${{ env.DB_MIGRATION_VERSION_OVERRIDE || env.DB_MIGRATION_VERSION }} + GW_LISTENER_VERSION: ${{ env.GW_LISTENER_VERSION_OVERRIDE || env.GW_LISTENER_VERSION }} + HOST_LISTENER_VERSION: ${{ env.HOST_LISTENER_VERSION_OVERRIDE || env.HOST_LISTENER_VERSION }} + TX_SENDER_VERSION: ${{ env.TX_SENDER_VERSION_OVERRIDE || env.TX_SENDER_VERSION }} + TFHE_WORKER_VERSION: ${{ env.TFHE_WORKER_VERSION_OVERRIDE || env.TFHE_WORKER_VERSION }} + SNS_WORKER_VERSION: ${{ env.SNS_WORKER_VERSION_OVERRIDE || env.SNS_WORKER_VERSION }} + ZKPROOF_WORKER_VERSION: ${{ env.ZKPROOF_WORKER_VERSION_OVERRIDE || env.ZKPROOF_WORKER_VERSION }} + + # Gateway component + GATEWAY_VERSION: ${{ env.GATEWAY_VERSION_OVERRIDE || env.GATEWAY_VERSION }} + + # Host component + HOST_VERSION: ${{ env.HOST_VERSION_OVERRIDE || env.HOST_VERSION }} + + # Connector components + CONNECTOR_DB_MIGRATION_VERSION: ${{ env.CONNECTOR_DB_MIGRATION_VERSION_OVERRIDE || env.CONNECTOR_DB_MIGRATION_VERSION }} + CONNECTOR_GW_LISTENER_VERSION: ${{ env.CONNECTOR_GW_LISTENER_VERSION_OVERRIDE || env.CONNECTOR_GW_LISTENER_VERSION }} + CONNECTOR_TX_SENDER_VERSION: ${{ env.CONNECTOR_TX_SENDER_VERSION_OVERRIDE || env.CONNECTOR_TX_SENDER_VERSION }} + CONNECTOR_KMS_WORKER_VERSION: ${{ env.CONNECTOR_KMS_WORKER_VERSION_OVERRIDE || env.CONNECTOR_KMS_WORKER_VERSION }} + + # Test suite component + TEST_SUITE_VERSION: ${{ env.TEST_SUITE_VERSION_OVERRIDE || env.TEST_SUITE_VERSION }} + run: | + ./fhevm-cli deploy + + - name: Input proof test (uint64) + working-directory: test-suite/fhevm + run: | + ./fhevm-cli test input-proof + + - name: Public Decryption test + working-directory: test-suite/fhevm + run: | + timeout 5m ./fhevm-cli test public-decryption + + - name: User Decryption test + working-directory: test-suite/fhevm + run: | + ./fhevm-cli test user-decryption + + - name: ERC20 test + working-directory: test-suite/fhevm + run: | + ./fhevm-cli test erc20 + + - name: Public Decryption HTTP endpoint test (ebool) + working-directory: test-suite/fhevm + run: | + ./fhevm-cli test public-decrypt-http-ebool + + - name: Public Decryption HTTP endpoint test (mixed) + working-directory: test-suite/fhevm + run: | + ./fhevm-cli test public-decrypt-http-mixed + + - name: Show logs on test failure + working-directory: test-suite/fhevm + if: always() + run: | + echo "::group::Relayer Logs" + ./fhevm-cli logs fhevm-relayer + echo "::endgroup::" + echo "::group::SNS Worker Logs" + ./fhevm-cli logs coprocessor-sns-worker | grep -v "Selected 0 rows to process" + echo "::endgroup::" + echo "::group::Transaction Sender Logs (filtered)" + ./fhevm-cli logs coprocessor-transaction-sender | grep -v "Selected 0 rows to process" + echo "::endgroup::" + echo "::group::Host Listener" + ./fhevm-cli logs coprocessor-host-listener + echo "::endgroup::" + echo "::group::Gateway Listener" + ./fhevm-cli logs coprocessor-gw-listener + echo "::endgroup::" + + - name: Cleanup + working-directory: test-suite/fhevm + if: always() + run: | + ./fhevm-cli clean diff --git a/.github/workflows/test-suite-e2e-tests.yml b/.github/workflows/test-suite-e2e-tests.yml index d4a94665c..a9aa9e846 100644 --- a/.github/workflows/test-suite-e2e-tests.yml +++ b/.github/workflows/test-suite-e2e-tests.yml @@ -1,50 +1,34 @@ name: test-suite-e2e-tests -# Github does not support more than 10 inputs for workflow_dispatch: -# https://docs.github.com/en/actions/reference/events-that-trigger-workflows#providing-inputs -# Core, relayer and test-suite will use the default versions defined in the `fhevm-cli` script on: workflow_dispatch: inputs: - connector_version: - description: "Connector Version" - default: "" - type: string - db_migration_version: - description: "Coprocessor DB Migration Image Version" - default: "" + coprocessor: + description: "Coprocessor versions array: [db_migration, gw_listener, host_listener, tx_sender, tfhe_worker, sns_worker, zkproof_worker]" + default: "[]" type: string - host_version: - description: "Host Image Version" + gateway: + description: "Gateway version" default: "" type: string - gateway_version: - description: "Gateway Image Version" - required: false + host: + description: "Host version" default: "" type: string - host_listener_version: - description: "Host Listener Image Version" - default: "" - type: string - gateway_listener_version: - description: "Gateway Listener Image Version" - default: "" + connector: + description: "Connector versions array: [db_migration, gw_listener, tx_sender, kms_worker]" + default: "[]" type: string - tx_sender_version: - description: "Transaction Sender Image Version" + test-suite: + description: "Test suite version" default: "" type: string - tfhe_worker_version: - description: "TFHE Worker Image Version" + relayer: + description: "Relayer version" default: "" type: string - sns_worker_version: - description: "SNS Worker Image Version" - default: "" - type: string - zkproof_worker_version: - description: "ZKProof Worker Image Version" + kms-core: + description: "KMS Core version" default: "" type: string pull_request: @@ -132,23 +116,111 @@ jobs: env: GH_REF_NAME: ${{ github.ref_name }} + - name: Parse component versions + id: parse-versions + env: + COPROCESSOR_INPUT: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.coprocessor || '[]' }} + GATEWAY_INPUT: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.gateway || '' }} + HOST_INPUT: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.host || '' }} + CONNECTOR_INPUT: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.connector || '[]' }} + TEST_SUITE_INPUT: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.test-suite || '' }} + RELAYER_INPUT: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.relayer || '' }} + KMS_CORE_INPUT: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.kms-core || '' }} + run: | + echo "šŸ”§ Parsing component versions..." + + # Parse coprocessor array (7 elements) + if [[ "${COPROCESSOR_INPUT}" != "[]" && -n "${COPROCESSOR_INPUT}" ]]; then + echo "šŸ“Š Coprocessor array: ${COPROCESSOR_INPUT}" + + db_migration_version=$(echo "${COPROCESSOR_INPUT}" | jq -r '.[0] // empty') + gw_listener_version=$(echo "${COPROCESSOR_INPUT}" | jq -r '.[1] // empty') + host_listener_version=$(echo "${COPROCESSOR_INPUT}" | jq -r '.[2] // empty') + tx_sender_version=$(echo "${COPROCESSOR_INPUT}" | jq -r '.[3] // empty') + tfhe_worker_version=$(echo "${COPROCESSOR_INPUT}" | jq -r '.[4] // empty') + sns_worker_version=$(echo "${COPROCESSOR_INPUT}" | jq -r '.[5] // empty') + zkproof_worker_version=$(echo "${COPROCESSOR_INPUT}" | jq -r '.[6] // empty') + + [[ -n "${db_migration_version}" ]] && echo "DB_MIGRATION_VERSION_OVERRIDE=${db_migration_version}" >> "$GITHUB_ENV" + [[ -n "${gw_listener_version}" ]] && echo "GW_LISTENER_VERSION_OVERRIDE=${gw_listener_version}" >> "$GITHUB_ENV" + [[ -n "${host_listener_version}" ]] && echo "HOST_LISTENER_VERSION_OVERRIDE=${host_listener_version}" >> "$GITHUB_ENV" + [[ -n "${tx_sender_version}" ]] && echo "TX_SENDER_VERSION_OVERRIDE=${tx_sender_version}" >> "$GITHUB_ENV" + [[ -n "${tfhe_worker_version}" ]] && echo "TFHE_WORKER_VERSION_OVERRIDE=${tfhe_worker_version}" >> "$GITHUB_ENV" + [[ -n "${sns_worker_version}" ]] && echo "SNS_WORKER_VERSION_OVERRIDE=${sns_worker_version}" >> "$GITHUB_ENV" + [[ -n "${zkproof_worker_version}" ]] && echo "ZKPROOF_WORKER_VERSION_OVERRIDE=${zkproof_worker_version}" >> "$GITHUB_ENV" + fi + + # Parse gateway string + [[ -n "${GATEWAY_INPUT}" ]] && echo "GATEWAY_VERSION_OVERRIDE=${GATEWAY_INPUT}" >> "$GITHUB_ENV" + + # Parse host string + [[ -n "${HOST_INPUT}" ]] && echo "HOST_VERSION_OVERRIDE=${HOST_INPUT}" >> "$GITHUB_ENV" + + # Parse connector array (4 elements) + if [[ "${CONNECTOR_INPUT}" != "[]" && -n "${CONNECTOR_INPUT}" ]]; then + echo "šŸ“Š Connector array: ${CONNECTOR_INPUT}" + + connector_db_migration=$(echo "${CONNECTOR_INPUT}" | jq -r '.[0] // empty') + connector_gw_listener=$(echo "${CONNECTOR_INPUT}" | jq -r '.[1] // empty') + connector_tx_sender=$(echo "${CONNECTOR_INPUT}" | jq -r '.[2] // empty') + connector_kms_worker=$(echo "${CONNECTOR_INPUT}" | jq -r '.[3] // empty') + + [[ -n "${connector_db_migration}" ]] && echo "CONNECTOR_DB_MIGRATION_VERSION_OVERRIDE=${connector_db_migration}" >> "$GITHUB_ENV" + [[ -n "${connector_gw_listener}" ]] && echo "CONNECTOR_GW_LISTENER_VERSION_OVERRIDE=${connector_gw_listener}" >> "$GITHUB_ENV" + [[ -n "${connector_tx_sender}" ]] && echo "CONNECTOR_TX_SENDER_VERSION_OVERRIDE=${connector_tx_sender}" >> "$GITHUB_ENV" + [[ -n "${connector_kms_worker}" ]] && echo "CONNECTOR_KMS_WORKER_VERSION_OVERRIDE=${connector_kms_worker}" >> "$GITHUB_ENV" + fi + + # Parse test-suite string + [[ -n "${TEST_SUITE_INPUT}" ]] && echo "TEST_SUITE_VERSION_OVERRIDE=${TEST_SUITE_INPUT}" >> "$GITHUB_ENV" + + # Parse relayer string + [[ -n "${RELAYER_INPUT}" ]] && echo "RELAYER_VERSION_OVERRIDE=${RELAYER_INPUT}" >> "$GITHUB_ENV" + + # Parse kms-core string + [[ -n "${KMS_CORE_INPUT}" ]] && echo "KMS_CORE_VERSION_OVERRIDE=${KMS_CORE_INPUT}" >> "$GITHUB_ENV" + + echo "āœ… Component versions parsed successfully" + - name: Deploy fhevm Stack working-directory: test-suite/fhevm env: - CONNECTOR_DB_MIGRATION_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.connector_version || env.CONNECTOR_DB_MIGRATION_VERSION }} - CONNECTOR_GW_LISTENER_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.connector_version || env.CONNECTOR_GW_LISTENER_VERSION }} - CONNECTOR_KMS_WORKER_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.connector_version || env.CONNECTOR_KMS_WORKER_VERSION }} - CONNECTOR_TX_SENDER_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.connector_version || env.CONNECTOR_TX_SENDER_VERSION }} - DB_MIGRATION_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.db_migration_version || env.DB_MIGRATION_VERSION }} - GATEWAY_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.gateway_version || env.GATEWAY_VERSION }} - HOST_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.host_version || env.HOST_VERSION }} - HOST_LISTENER_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.host_listener_version || env.HOST_LISTENER_VERSION }} - GW_LISTENER_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.gateway_listener_version || env.GW_LISTENER_VERSION }} - TX_SENDER_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.tx_sender_version || env.TX_SENDER_VERSION }} - TFHE_WORKER_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.tfhe_worker_version || env.TFHE_WORKER_VERSION }} - SNS_WORKER_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.sns_worker_version || env.SNS_WORKER_VERSION }} - ZKPROOF_WORKER_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.zkproof_worker_version || env.ZKPROOF_WORKER_VERSION }} + # Coprocessor components - only set if overridden + DB_MIGRATION_VERSION: ${{ env.DB_MIGRATION_VERSION_OVERRIDE }} + GW_LISTENER_VERSION: ${{ env.GW_LISTENER_VERSION_OVERRIDE }} + HOST_LISTENER_VERSION: ${{ env.HOST_LISTENER_VERSION_OVERRIDE }} + TX_SENDER_VERSION: ${{ env.TX_SENDER_VERSION_OVERRIDE }} + TFHE_WORKER_VERSION: ${{ env.TFHE_WORKER_VERSION_OVERRIDE }} + SNS_WORKER_VERSION: ${{ env.SNS_WORKER_VERSION_OVERRIDE }} + ZKPROOF_WORKER_VERSION: ${{ env.ZKPROOF_WORKER_VERSION_OVERRIDE }} + + # Gateway component - only set if overridden + GATEWAY_VERSION: ${{ env.GATEWAY_VERSION_OVERRIDE }} + + # Host component - only set if overridden + HOST_VERSION: ${{ env.HOST_VERSION_OVERRIDE }} + + # Connector components - only set if overridden + CONNECTOR_DB_MIGRATION_VERSION: ${{ env.CONNECTOR_DB_MIGRATION_VERSION_OVERRIDE }} + CONNECTOR_GW_LISTENER_VERSION: ${{ env.CONNECTOR_GW_LISTENER_VERSION_OVERRIDE }} + CONNECTOR_TX_SENDER_VERSION: ${{ env.CONNECTOR_TX_SENDER_VERSION_OVERRIDE }} + CONNECTOR_KMS_WORKER_VERSION: ${{ env.CONNECTOR_KMS_WORKER_VERSION_OVERRIDE }} run: | + echo "šŸš€ Deploying fhevm stack with versions:" + echo " Coprocessor DB Migration: ${DB_MIGRATION_VERSION:-fhevm-cli default}" + echo " Coprocessor GW Listener: ${GW_LISTENER_VERSION:-fhevm-cli default}" + echo " Coprocessor Host Listener: ${HOST_LISTENER_VERSION:-fhevm-cli default}" + echo " Coprocessor TX Sender: ${TX_SENDER_VERSION:-fhevm-cli default}" + echo " Coprocessor TFHE Worker: ${TFHE_WORKER_VERSION:-fhevm-cli default}" + echo " Coprocessor SNS Worker: ${SNS_WORKER_VERSION:-fhevm-cli default}" + echo " Coprocessor ZKProof Worker: ${ZKPROOF_WORKER_VERSION:-fhevm-cli default}" + echo " Gateway: ${GATEWAY_VERSION:-fhevm-cli default}" + echo " Host: ${HOST_VERSION:-fhevm-cli default}" + echo " Connector DB Migration: ${CONNECTOR_DB_MIGRATION_VERSION:-fhevm-cli default}" + echo " Connector GW Listener: ${CONNECTOR_GW_LISTENER_VERSION:-fhevm-cli default}" + echo " Connector TX Sender: ${CONNECTOR_TX_SENDER_VERSION:-fhevm-cli default}" + echo " Connector KMS Worker: ${CONNECTOR_KMS_WORKER_VERSION:-fhevm-cli default}" + ./fhevm-cli deploy - name: Input proof test (uint64) diff --git a/.github/workflows/test-suite-orchestrate-e2e-tests.yml b/.github/workflows/test-suite-orchestrate-e2e-tests.yml new file mode 100644 index 000000000..9f5d8b08e --- /dev/null +++ b/.github/workflows/test-suite-orchestrate-e2e-tests.yml @@ -0,0 +1,384 @@ +name: test-suite-orchestrate-e2e-tests + +on: + workflow_dispatch: + pull_request: + branches: + - main + +permissions: {} # No permissions needed at workflow level + +concurrency: + group: test-suite-orchestrate-e2e-tests-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +jobs: + trigger-builds: + name: test-suite-orchestrate-e2e-tests/trigger-builds + # to be activated before merging this PR + # if: ${{ startsWith(github.head_ref, 'mergify/merge-queue/') }} + permissions: + actions: 'write' # Required to trigger other workflows via workflow_dispatch + contents: 'read' # Required to read repository information and refs + runs-on: ubuntu-latest + outputs: + built-images: ${{ steps.collect.outputs.built-images }} + image-tag: ${{ steps.collect.outputs.image-tag }} + steps: + - name: Trigger build workflows and collect results + id: collect + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const workflows = ['test-suite-docker-build.yml']; + + // Determine target ref + let ref; + if (context.eventName === 'pull_request') { + const pr = context.payload.pull_request; + if (pr.head.repo.full_name !== `${context.repo.owner}/${context.repo.repo}`) { + core.warning('PR from fork; skipping dispatch of internal build workflows.'); + return; + } + ref = pr.head.ref; + } else { + ref = process.env.GITHUB_REF_NAME || context.ref.replace('refs/heads/',''); + } + + console.log(`šŸš€ Triggering builds using ref: ${ref}`); + + // Trigger all build workflows + for (const workflow of workflows) { + console.log(`\nTriggering ${workflow} on ref: ${ref}`); + + try { + const response = await github.rest.actions.createWorkflowDispatch({ + owner: context.repo.owner, + repo: context.repo.repo, + workflow_id: workflow, + ref: ref, + inputs: { + ref: ref, + trigger_source: 'test-suite-orchestrate-e2e-tests' + } + }); + + console.log(`āœ… Successfully triggered ${workflow} (status: ${response.status})`); + } catch (error) { + console.log(`āŒ Failed to trigger ${workflow}: ${error.message}`); + } + } + + // Wait for workflows to start + console.log('\nā³ Waiting 30 seconds for workflows to start...'); + await new Promise(resolve => setTimeout(resolve, 30000)); + + // Set up image mapping + const workflowToImage = { + 'test-suite-docker-build': 'test_suite_version' + }; + + // Wait for builds to complete and collect results + const maxAttempts = 60; + let attempt = 1; + let builtImages = []; + + while (attempt <= maxAttempts) { + console.log(`\nAttempt ${attempt}/${maxAttempts}: Checking workflow results`); + let allDone = true; + const currentBuiltImages = []; + + for (const workflowName of Object.keys(workflowToImage)) { + console.log(`Checking workflow: ${workflowName}`); + + // Look for recent workflow_dispatch runs (last 45 minutes) + const sinceTime = new Date(Date.now() - 45 * 60 * 1000).toISOString(); + + try { + const runs = await github.rest.actions.listWorkflowRuns({ + owner: context.repo.owner, + repo: context.repo.repo, + workflow_id: `${workflowName}.yml`, + event: 'workflow_dispatch', + created: `>=${sinceTime}`, + per_page: 5 + }); + + const recentRun = runs.data.workflow_runs[0]; + + if (recentRun) { + console.log(` Found run: ID=${recentRun.id}, Status=${recentRun.status}, Conclusion=${recentRun.conclusion || 'null'}`); + + if (recentRun.conclusion === 'success') { + // Check if docker jobs succeeded + const jobs = await github.rest.actions.listJobsForWorkflowRun({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: recentRun.id + }); + + const dockerJobs = jobs.data.jobs.filter(job => + job.name.includes('docker') && job.conclusion === 'success' + ); + + if (dockerJobs.length > 0) { + const imageName = workflowToImage[workflowName]; + currentBuiltImages.push(imageName); + console.log(` āœ… ${workflowName} built image: ${imageName} (${dockerJobs.length} docker jobs succeeded)`); + } else { + console.log(` šŸ”¶ ${workflowName} completed but no docker jobs succeeded`); + } + } else if (recentRun.conclusion === 'failure' || recentRun.conclusion === 'cancelled') { + console.log(` āŒ ${workflowName} failed with conclusion: ${recentRun.conclusion}`); + } else if (recentRun.status === 'in_progress' || recentRun.status === 'queued') { + console.log(` ā³ ${workflowName} still running (status: ${recentRun.status})`); + allDone = false; + } + } else { + console.log(` āš ļø No recent workflow_dispatch run found for ${workflowName}`); + allDone = false; + } + } catch (error) { + console.log(` āŒ Error checking ${workflowName}: ${error.message}`); + allDone = false; + } + } + + if (allDone) { + builtImages = currentBuiltImages; + break; + } + + console.log('Not all workflows complete yet, waiting 30 seconds...'); + await new Promise(resolve => setTimeout(resolve, 30000)); + attempt++; + } + + if (attempt > maxAttempts) { + console.log('āš ļø Timeout waiting for workflows to complete, using current results'); + builtImages = currentBuiltImages || []; + } + + // Create outputs + const imageTag = context.sha.substring(0, 7); + const jsonArray = JSON.stringify([...new Set(builtImages)]); + + console.log(`\nšŸ“Š Final results:`); + console.log(` Image tag: ${imageTag}`); + console.log(` Built images: ${jsonArray}`); + + // Set GitHub outputs + core.setOutput('built-images', jsonArray); + core.setOutput('image-tag', imageTag); + + orchestrate-e2e-tests: + name: test-suite-orchestrate-e2e-tests/orchestrate-e2e-tests + needs: trigger-builds + if: always() + permissions: + actions: 'write' # Required to trigger E2E test workflows via workflow_dispatch + contents: 'read' # Required to read repository information and refs + runs-on: ubuntu-latest + steps: + - name: Orchestrate E2E Tests + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + env: + IMAGE_TAG: ${{ needs.trigger-builds.outputs.image-tag }} + BUILT_IMAGES: ${{ needs.trigger-builds.outputs.built-images }} + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const imageTag = process.env.IMAGE_TAG; + const builtImagesStr = process.env.BUILT_IMAGES || '[]'; + + console.log(`šŸ“Š Image tag: ${imageTag}`); + console.log(`šŸ“¦ Built images string: ${builtImagesStr}`); + + // Parse built images + let builtImages; + try { + builtImages = JSON.parse(builtImagesStr); + } catch (e) { + console.log(`āŒ Failed to parse BUILT_IMAGES: ${e.message}`); + return; + } + + if (!Array.isArray(builtImages)) { + console.log(`āŒ BUILT_IMAGES is not an array: ${typeof builtImages}`); + return; + } + + console.log(`šŸ“‹ Parsed built images:`, builtImages); + + // Initialize the 7 inputs that match test-suite-e2e-tests-mq.yml exactly + const inputs = {}; + + // Map built images to the exact 7-input structure from test-suite-e2e-tests-mq.yml + const componentMapping = { + 'db_migration_version': { type: 'coprocessor', index: 0 }, + 'gateway_listener_version': { type: 'coprocessor', index: 1 }, + 'host_listener_version': { type: 'coprocessor', index: 2 }, + 'tx_sender_version': { type: 'coprocessor', index: 3 }, + 'tfhe_worker_version': { type: 'coprocessor', index: 4 }, + 'sns_worker_version': { type: 'coprocessor', index: 5 }, + 'zkproof_worker_version': { type: 'coprocessor', index: 6 }, + 'gateway_version': { type: 'gateway' }, + 'host_version': { type: 'host' }, + 'connector_version': { type: 'connector', index: 'all' }, // Special case for all connector components + 'test_suite_version': { type: 'test-suite' }, + 'relayer_version': { type: 'relayer' }, + 'kms_core_version': { type: 'kms-core' } + }; + + // Initialize arrays - but only add to inputs if we have actual built images + const coprocessorArray = new Array(7).fill(null); + const connectorArray = new Array(4).fill(null); + let hasCoprocessorBuilds = false; + let hasConnectorBuilds = false; + let hasGatewayBuild = false; + let hasHostBuild = false; + let hasTestSuiteBuild = false; + let hasRelayerBuild = false; + let hasKmsCoreBuild = false; + + // Map built images to components + for (const builtImage of builtImages) { + const mapping = componentMapping[builtImage]; + if (mapping) { + console.log(`āœ… Processing ${builtImage} → ${mapping.type}${mapping.index !== undefined ? `[${mapping.index}]` : ''} = ${imageTag}`); + + switch (mapping.type) { + case 'coprocessor': + coprocessorArray[mapping.index] = imageTag; + hasCoprocessorBuilds = true; + break; + case 'gateway': + hasGatewayBuild = true; + break; + case 'host': + hasHostBuild = true; + break; + case 'connector': + if (mapping.index === 'all') { + // Set all 4 connector components: [db_migration, gw_listener, tx_sender, kms_worker] + connectorArray.fill(imageTag); + hasConnectorBuilds = true; + } else { + connectorArray[mapping.index] = imageTag; + hasConnectorBuilds = true; + } + break; + case 'test-suite': + hasTestSuiteBuild = true; + break; + case 'relayer': + hasRelayerBuild = true; + break; + case 'kms-core': + hasKmsCoreBuild = true; + break; + } + } else { + console.log(`ā­ļø Skipping ${builtImage} (no component mapping)`); + } + } + + // Only add inputs for components that were actually built + + // 1. coprocessor: array of 7 elements - only if at least one coprocessor component was built + if (hasCoprocessorBuilds) { + inputs.coprocessor = JSON.stringify(coprocessorArray); + console.log(`šŸ“ Input 1 - coprocessor: ${inputs.coprocessor}`); + } + + // 2. gateway: string - only if gateway was built + if (hasGatewayBuild) { + inputs.gateway = imageTag; + console.log(`šŸ“ Input 2 - gateway: ${imageTag}`); + } + + // 3. host: string - only if host was built + if (hasHostBuild) { + inputs.host = imageTag; + console.log(`šŸ“ Input 3 - host: ${imageTag}`); + } + + // 4. connector: array of 4 elements - only if at least one connector component was built + if (hasConnectorBuilds) { + inputs.connector = JSON.stringify(connectorArray); + console.log(`šŸ“ Input 4 - connector: ${inputs.connector}`); + } + + // 5. test-suite: string - only if test-suite was built + if (hasTestSuiteBuild) { + inputs['test-suite'] = imageTag; + console.log(`šŸ“ Input 5 - test-suite: ${imageTag}`); + } + + // 6. relayer: string - only if relayer was built + if (hasRelayerBuild) { + inputs.relayer = imageTag; + console.log(`šŸ“ Input 6 - relayer: ${imageTag}`); + } + + // 7. kms-core: string - only if kms-core was built + if (hasKmsCoreBuild) { + inputs['kms-core'] = imageTag; + console.log(`šŸ“ Input 7 - kms-core: ${imageTag}`); + } + + // Determine target ref + let ref; + if (context.eventName === 'pull_request') { + ref = context.payload.pull_request.head.ref; + } else { + ref = process.env.GITHUB_REF_NAME || context.ref.replace('refs/heads/',''); + } + + console.log(`šŸš€ Dispatching E2E tests on ref: ${ref}`); + console.log(`šŸ“ Final inputs (${Object.keys(inputs).length}/7 possible):`, inputs); + + // Always dispatch E2E tests + if (Object.keys(inputs).length === 0) { + console.log('šŸ” No built images found, dispatching E2E tests with all fhevm-cli defaults'); + } else { + console.log(`šŸ“Š Dispatching with ${Object.keys(inputs).length} component overrides, others will use fhevm-cli defaults`); + } + + try { + await github.rest.actions.createWorkflowDispatch({ + owner: context.repo.owner, + repo: context.repo.repo, + workflow_id: 'test-suite-e2e-tests-mq.yml', + ref: ref, + inputs: inputs + }); + + console.log('āœ… E2E tests workflow dispatched successfully!'); + + // Log what versions will be used + if (Object.keys(inputs).length > 0) { + console.log('šŸ“‹ E2E tests will use these overridden versions:'); + Object.entries(inputs).forEach(([key, value]) => { + console.log(` ${key}: ${value}`); + }); + console.log('šŸ“‹ All other components will use fhevm-cli defaults'); + } else { + console.log('šŸ“‹ E2E tests will use all fhevm-cli defaults'); + } + + } catch (error) { + console.log(`āŒ Failed to dispatch E2E tests: ${error.message}`); + + if (error.message.includes('Unexpected inputs provided')) { + console.log('šŸ’” The E2E workflow rejected some inputs.'); + console.log('šŸ” This indicates a mismatch between input names.'); + console.log('šŸ“‹ Attempted inputs:', Object.keys(inputs)); + console.log('šŸ“‹ Expected inputs: coprocessor, gateway, host, connector, test-suite, relayer, kms-core'); + } + + core.setFailed(`Failed to dispatch E2E tests: ${error.message}`); + } diff --git a/.mergify.yml b/.mergify.yml index 0d1e9d862..371513534 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -6,7 +6,8 @@ queue_rules: merge_method: squash update_method: rebase merge_conditions: - - check-success = test-suite-e2e-tests/fhevm-e2e-test (bpr) + - check-success = trigger-all-builds/trigger-builds + - check-success = orchestrate-e2e-tests/run-e2e-tests queue_conditions: - base = main - label!=do-not-merge diff --git a/coprocessor/README.md b/coprocessor/README.md index ffb7fe486..6cc4d96ff 100644 --- a/coprocessor/README.md +++ b/coprocessor/README.md @@ -160,6 +160,8 @@ Options: [default: 1] --error-sleep-max-secs [default: 10] + --catchup-kms-generation-from-block + [default: None] -h, --help Print help -V, --version diff --git a/coprocessor/fhevm-engine/db-migration/migrations/20251006080000_computations_auto_notify.sql b/coprocessor/fhevm-engine/db-migration/migrations/20251006080000_computations_auto_notify.sql new file mode 100644 index 000000000..6cf3ecbdc --- /dev/null +++ b/coprocessor/fhevm-engine/db-migration/migrations/20251006080000_computations_auto_notify.sql @@ -0,0 +1,16 @@ +-- Create function to notify on work updates +CREATE OR REPLACE FUNCTION notify_work_available() + RETURNS trigger AS $$ +BEGIN + -- Notify all listeners of work_updated channel + NOTIFY work_available; + RETURN NULL; +END; +$$ LANGUAGE plpgsql; + +-- Create trigger to fire once per statement on computations inserts +CREATE TRIGGER work_updated_trigger_from_computations_insertions + AFTER INSERT + ON computations + FOR EACH STATEMENT + EXECUTE FUNCTION notify_work_available(); diff --git a/coprocessor/fhevm-engine/gw-listener/src/bin/gw_listener.rs b/coprocessor/fhevm-engine/gw-listener/src/bin/gw_listener.rs index a6191a911..ca0b56f56 100644 --- a/coprocessor/fhevm-engine/gw-listener/src/bin/gw_listener.rs +++ b/coprocessor/fhevm-engine/gw-listener/src/bin/gw_listener.rs @@ -72,6 +72,9 @@ struct Conf { /// gw-listener service name in OTLP traces #[arg(long, default_value = "gw-listener")] pub service_name: String, + + #[arg(long, default_value = None, help = "Can be negative from last processed block", allow_hyphen_values = true)] + pub catchup_kms_generation_from_block: Option, } fn install_signal_handlers(cancel_token: CancellationToken) -> anyhow::Result<()> { @@ -142,7 +145,7 @@ async fn main() -> anyhow::Result<()> { let cancel_token = CancellationToken::new(); let Some(host_chain_id) = conf.host_chain_id.or_else(chain_id_from_env) else { - anyhow::bail!("--chain-id or CHAIN_ID env var is missing.") + anyhow::bail!("--host-chain-id or CHAIN_ID env var is missing.") }; let config = ConfigSettings { host_chain_id, @@ -156,6 +159,7 @@ async fn main() -> anyhow::Result<()> { health_check_timeout: conf.health_check_timeout, get_logs_poll_interval: conf.get_logs_poll_interval, get_logs_block_batch_size: conf.get_logs_block_batch_size, + catchup_kms_generation_from_block: conf.catchup_kms_generation_from_block, }; let gw_listener = GatewayListener::new( diff --git a/coprocessor/fhevm-engine/gw-listener/src/gw_listener.rs b/coprocessor/fhevm-engine/gw-listener/src/gw_listener.rs index ec66c7882..fb101016b 100644 --- a/coprocessor/fhevm-engine/gw-listener/src/gw_listener.rs +++ b/coprocessor/fhevm-engine/gw-listener/src/gw_listener.rs @@ -111,9 +111,13 @@ impl + Clone + 'static, A: AwsS3Interface + Clone + 'stati let s = self.clone(); let d = db_pool.clone(); tokio::spawn(async move { + let mut catchup_kms_generation_from = s.conf.catchup_kms_generation_from_block; let mut sleep_duration = s.conf.error_sleep_initial_secs as u64; loop { - match s.run_get_logs(&d, &mut sleep_duration).await { + match s + .run_get_logs(&d, &mut sleep_duration, &mut catchup_kms_generation_from) + .await + { Ok(_) => { info!("run_get_logs() stopped"); break; @@ -182,9 +186,26 @@ impl + Clone + 'static, A: AwsS3Interface + Clone + 'stati &self, db_pool: &Pool, sleep_duration: &mut u64, + catchup_kms_generation_from: &mut Option, ) -> anyhow::Result<()> { let mut ticker = tokio::time::interval(self.conf.get_logs_poll_interval); let mut last_processed_block_num = self.get_last_processed_block_num(db_pool).await?; + if let Some(from_block) = *catchup_kms_generation_from { + info!(from_block, "Catchup on KMSGeneration, start"); + let from_block = if from_block >= 0 { + // start from specified block + from_block + } else if let Some(last) = last_processed_block_num { + // go N block in past from processed + last as i64 + from_block + } else { + // go N block in past + let current_block = self.provider.get_block_number().await?; + current_block as i64 + from_block + }; + // note, we cannot catchup block 0 + last_processed_block_num = Some(from_block.try_into().unwrap_or(0)); + } loop { tokio::select! { @@ -217,6 +238,9 @@ impl + Clone + 'static, A: AwsS3Interface + Clone + 'stati .to_block(to_block); let logs = self.provider.get_logs(&filter).await?; + if catchup_kms_generation_from.is_some() && from_block < current_block { + info!(from_block, to_block, nb_events=logs.len(), "Catchup on KMSGeneration, get_logs"); + } for log in logs { if let Ok(event) = KMSGeneration::KMSGenerationEvents::decode_log(&log.inner) { match event.data { @@ -246,6 +270,16 @@ impl + Clone + 'static, A: AwsS3Interface + Clone + 'stati } } last_processed_block_num = Some(to_block); + if catchup_kms_generation_from.is_some() { + if to_block == current_block { + info!("Catchup on KMSGeneration, finished"); + *catchup_kms_generation_from = None; + } else { + // if an error happens catchup will restart here + *catchup_kms_generation_from = Some(to_block as i64 + 1); + info!(catchup_kms_generation_from, "Catchup on KMSGeneration continue"); + } + } self.update_last_block_num(db_pool, last_processed_block_num).await?; if to_block < current_block { debug!(to_block = to_block, diff --git a/coprocessor/fhevm-engine/gw-listener/src/lib.rs b/coprocessor/fhevm-engine/gw-listener/src/lib.rs index 1ca952eca..fe5bd428f 100644 --- a/coprocessor/fhevm-engine/gw-listener/src/lib.rs +++ b/coprocessor/fhevm-engine/gw-listener/src/lib.rs @@ -48,6 +48,7 @@ pub struct ConfigSettings { pub get_logs_poll_interval: Duration, pub get_logs_block_batch_size: u64, + pub catchup_kms_generation_from_block: Option, } pub fn chain_id_from_env() -> Option { @@ -74,6 +75,7 @@ impl Default for ConfigSettings { health_check_timeout: Duration::from_secs(4), get_logs_poll_interval: Duration::from_secs(1), get_logs_block_batch_size: 100, + catchup_kms_generation_from_block: None, } } } diff --git a/coprocessor/fhevm-engine/gw-listener/tests/gw_listener_tests.rs b/coprocessor/fhevm-engine/gw-listener/tests/gw_listener_tests.rs index a8b393fcf..d8d5c7f12 100644 --- a/coprocessor/fhevm-engine/gw-listener/tests/gw_listener_tests.rs +++ b/coprocessor/fhevm-engine/gw-listener/tests/gw_listener_tests.rs @@ -459,6 +459,135 @@ async fn keygen_ok() -> anyhow::Result<()> { Ok(()) } +#[tokio::test] +#[serial(db)] +async fn keygen_ok_catchup_positive() -> anyhow::Result<()> { + keygen_ok_catchup_gen(true).await +} + +#[tokio::test] +#[serial(db)] +async fn keygen_ok_catchup_negative() -> anyhow::Result<()> { + keygen_ok_catchup_gen(false).await +} + +async fn keygen_ok_catchup_gen(positive: bool) -> anyhow::Result<()> { + use aws_sdk_s3::operation::get_object::GetObjectOutput; + use aws_sdk_s3::primitives::ByteStream; + use aws_sdk_s3::Client; + use aws_smithy_mocks::RuleMode; + use aws_smithy_mocks::{mock, mock_client}; + use gw_listener::KeyType; + + // see ../contracts/KMSGeneration.sol + let buckets = [ + "test-bucket1/PUB-P1", + "test-bucket2/PUB-P2", + "test-bucket3/PUB-P3", + "test-bucket4/PUB-P4", + ]; + + let keys_digests = [KeyType::PublicKey, KeyType::ServerKey]; + + let key_id = U256::from(16); + + let mut rules = vec![]; + for &bucket in &buckets { + for key_type in &keys_digests { + let key_type_str: &str = to_bucket_key_prefix(*key_type); + let key_id_no_0x = key_id_to_key_bucket(key_id); + let key = format!("{}/{}", key_type_str, key_id_no_0x); + eprintln!("Adding {}/{}", bucket, key); + let get_object_rule = mock!(Client::get_object) + .match_requests(move |req| req.bucket() == Some(bucket) && req.key() == Some(&key)) + .then_output(|| { + GetObjectOutput::builder() + .body(ByteStream::from_static(b"key_bytes")) + .build() + }); + rules.push(get_object_rule); + } + } + for &bucket in &buckets { + let key_id_no_0x = &format!("{key_id:064X}"); + let key = format!("PUB/CRS/{key_id_no_0x}"); + eprintln!("Adding {}/{}", bucket, key); + let get_object_rule = mock!(Client::get_object) + .match_requests(move |req| req.bucket() == Some(bucket) && req.key() == Some(&key)) + .then_output(|| { + GetObjectOutput::builder() + .body(ByteStream::from_static(b"key_bytes")) + .build() + }); + rules.push(get_object_rule); + } + let rules_ref: Vec<_> = rules.iter().collect(); + + // Create a mocked client with the rule + let s3 = mock_client!(aws_sdk_s3, RuleMode::MatchAny, &rules_ref); + + let env = TestEnvironment::new().await?; + let provider = ProviderBuilder::new() + .wallet(env.wallet) + .connect_ws(WsConnect::new(env.anvil.ws_endpoint_url())) + .await?; + let aws_s3_client = AwsS3ClientMocked(s3); + let input_verification = InputVerification::deploy(&provider).await?; + let kms_generation = KMSGeneration::deploy(&provider).await?; + + assert!(provider.get_block_number().await? > 0); + + let txn_req = kms_generation + .keygen_public_key() + .into_transaction_request(); + let pending_txn = provider.send_transaction(txn_req).await?; + let receipt = pending_txn.get_receipt().await?; + assert!(receipt.status()); + + let txn_req = kms_generation + .keygen_server_key() + .into_transaction_request(); + let pending_txn = provider.send_transaction(txn_req).await?; + let receipt = pending_txn.get_receipt().await?; + assert!(receipt.status()); + + let txn_req = kms_generation.crsgen().into_transaction_request(); + let pending_txn = provider.send_transaction(txn_req).await?; + let receipt = pending_txn.get_receipt().await?; + assert!(receipt.status()); + + assert!(has_not_public_key(&env.db_pool.clone()).await?); + assert!(has_not_server_key(&env.db_pool.clone()).await?); + assert!(has_not_crs(&env.db_pool.clone()).await?); + + let catchup_kms_generation_from_block = if positive { + Some(0) + } else { + Some(-(provider.get_block_number().await? as i64)) + }; + let conf = ConfigSettings { + catchup_kms_generation_from_block, + ..env.conf.clone() + }; + let gw_listener = GatewayListener::new( + *input_verification.address(), + *kms_generation.address(), + conf, + env.cancel_token.clone(), + provider.clone(), + aws_s3_client.clone(), + ); + let listener = tokio::spawn(async move { gw_listener.run().await }); + + assert!(has_public_key(&env.db_pool.clone()).await?); + assert!(has_server_key(&env.db_pool.clone()).await?); + assert!(has_crs(&env.db_pool.clone()).await?); + + env.cancel_token.cancel(); + listener.abort(); + Ok(()) +} + #[tokio::test] #[serial(db)] async fn keygen_compromised_key() -> anyhow::Result<()> { diff --git a/coprocessor/fhevm-engine/host-listener/src/database/tfhe_event_propagate.rs b/coprocessor/fhevm-engine/host-listener/src/database/tfhe_event_propagate.rs index e34c3d82f..9fc635efa 100644 --- a/coprocessor/fhevm-engine/host-listener/src/database/tfhe_event_propagate.rs +++ b/coprocessor/fhevm-engine/host-listener/src/database/tfhe_event_propagate.rs @@ -536,12 +536,6 @@ impl Database { AclContractEvents::Initialized(initialized) => { warn!(event = ?initialized, "unhandled Acl::Initialized event"); } - AclContractEvents::NewDelegation(new_delegation) => { - warn!( - event = ?new_delegation, - "unhandled Acl::NewDelegation event" - ); - } AclContractEvents::OwnershipTransferStarted( ownership_transfer_started, ) => { @@ -556,12 +550,6 @@ impl Database { "unhandled Acl::OwnershipTransferred event" ); } - AclContractEvents::RevokedDelegation(revoked_delegation) => { - warn!( - event = ?revoked_delegation, - "unhandled Acl::RevokedDelegation event" - ); - } AclContractEvents::Upgraded(upgraded) => { warn!( event = ?upgraded, @@ -580,12 +568,6 @@ impl Database { "unhandled Acl::Unpaused event" ); } - AclContractEvents::UpdatePauser(update_pauser) => { - warn!( - event = ?update_pauser, - "unhandled Acl::UpdatePauser event" - ); - } } self.tick.update(); Ok(()) @@ -770,13 +752,10 @@ pub fn acl_result_handles(event: &Log) -> Vec { allowed_for_decryption.handlesList.clone() } AclContractEvents::Initialized(_) - | AclContractEvents::NewDelegation(_) | AclContractEvents::OwnershipTransferStarted(_) | AclContractEvents::OwnershipTransferred(_) - | AclContractEvents::RevokedDelegation(_) | AclContractEvents::Upgraded(_) | AclContractEvents::Paused(_) - | AclContractEvents::Unpaused(_) - | AclContractEvents::UpdatePauser(_) => vec![], + | AclContractEvents::Unpaused(_) => vec![], } } diff --git a/gateway-contracts/contracts/CiphertextCommits.sol b/gateway-contracts/contracts/CiphertextCommits.sol index ab0470c8b..cea82dcf5 100644 --- a/gateway-contracts/contracts/CiphertextCommits.sol +++ b/gateway-contracts/contracts/CiphertextCommits.sol @@ -12,18 +12,24 @@ import { CiphertextMaterial, SnsCiphertextMaterial } from "./shared/Structs.sol" /** * @title CiphertextCommits smart contract - * @dev See {ICiphertextCommits}. + * @notice See {ICiphertextCommits}. */ contract CiphertextCommits is ICiphertextCommits, UUPSUpgradeableEmptyProxy, GatewayOwnable, GatewayConfigChecks { - /// @notice The address of the GatewayConfig contract, used for fetching information about coprocessors. + /** + * @notice The address of the GatewayConfig contract, used for fetching information about coprocessors. + */ IGatewayConfig private constant GATEWAY_CONFIG = IGatewayConfig(gatewayConfigAddress); - /// @notice The address of the KMSGeneration contract, used for fetching information about the current key. + /** + * @notice The address of the KMSGeneration contract, used for fetching information about the current key. + */ IKMSGeneration private constant KMS_GENERATION = IKMSGeneration(kmsGenerationAddress); - /// @dev The following constants are used for versioning the contract. They are made private - /// @dev in order to force derived contracts to consider a different version. Note that - /// @dev they can still define their own private constants with the same name. + /** + * @dev The following constants are used for versioning the contract. They are made private + * in order to force derived contracts to consider a different version. Note that + * they can still define their own private constants with the same name. + */ string private constant CONTRACT_NAME = "CiphertextCommits"; uint256 private constant MAJOR_VERSION = 0; uint256 private constant MINOR_VERSION = 1; @@ -37,14 +43,15 @@ contract CiphertextCommits is ICiphertextCommits, UUPSUpgradeableEmptyProxy, Gat */ uint64 private constant REINITIALIZER_VERSION = 2; - /// @notice The contract's variable storage struct (@dev see ERC-7201) + /** + * @notice The contract's variable storage struct (@dev see ERC-7201) + */ /// @custom:storage-location erc7201:fhevm_gateway.storage.CiphertextCommits struct CiphertextCommitsStorage { // ---------------------------------------------------------------------------------------------- // Ciphertext material state variables: // ---------------------------------------------------------------------------------------------- /// @notice The key IDs used for generating the ciphertext. - /// @dev It's necessary in case new keys are generated: we need to know what key to use for using a ciphertext. mapping(bytes32 ctHandle => uint256 keyId) keyIds; /// @notice The regular ciphertext digests tied to the ciphertext handle. mapping(bytes32 ctHandle => bytes32 ctDigest) ciphertextDigests; @@ -68,11 +75,18 @@ contract CiphertextCommits is ICiphertextCommits, UUPSUpgradeableEmptyProxy, Gat alreadyAddedCoprocessorTxSenders; /// @notice The coprocessor transaction senders involved in a consensus for a ciphertext material addition. mapping(bytes32 addCiphertextHash => address[] coprocessorTxSenderAddresses) coprocessorTxSenderAddresses; + // ---------------------------------------------------------------------------------------------- + // Coprocessor context state variables: + // ---------------------------------------------------------------------------------------------- + /// @notice The coprocessor context ID associated to the add ciphertext + mapping(bytes32 addCiphertextHash => uint256 contextId) addCiphertextContextId; } - /// @dev Storage location has been computed using the following command: - /// @dev keccak256(abi.encode(uint256(keccak256("fhevm_gateway.storage.CiphertextCommits")) - 1)) & - /// @dev ~bytes32(uint256(0xff)) + /** + * @dev Storage location has been computed using the following command: + * keccak256(abi.encode(uint256(keccak256("fhevm_gateway.storage.CiphertextCommits")) - 1)) + * & ~bytes32(uint256(0xff)) + */ bytes32 private constant CIPHERTEXT_COMMITS_STORAGE_LOCATION = 0xf41c60ea5b83c8f19b663613ffdd3fa441a59933b8a4fdf4da891b38433d1a00; @@ -96,8 +110,9 @@ contract CiphertextCommits is ICiphertextCommits, UUPSUpgradeableEmptyProxy, Gat /// @custom:oz-upgrades-validate-as-initializer // function reinitializeV2() public virtual reinitializer(REINITIALIZER_VERSION) {} - /// @notice See {ICiphertextCommits-addCiphertextMaterial}. - /// @dev This function calls the GatewayConfig contract to check that the sender address is a Coprocessor. + /** + * @notice See {ICiphertextCommits-addCiphertextMaterial}. + */ function addCiphertextMaterial( bytes32 ctHandle, uint256 keyId, @@ -119,6 +134,12 @@ contract CiphertextCommits is ICiphertextCommits, UUPSUpgradeableEmptyProxy, Gat bytes32 addCiphertextHash = keccak256(abi.encode(ctHandle, keyId, ciphertextDigest, snsCiphertextDigest)); $.addCiphertextHashCounters[addCiphertextHash]++; + // Associate the handle to coprocessor context ID 1 to anticipate their introduction in V2. + // Only set the context ID if it hasn't been set yet to avoid multiple identical SSTOREs. + if ($.addCiphertextContextId[addCiphertextHash] == 0) { + $.addCiphertextContextId[addCiphertextHash] = 1; + } + // It is ok to only the handle can be considered here as a handle should only be added once // in the contract anyway $.alreadyAddedCoprocessorTxSenders[ctHandle][msg.sender] = true; @@ -159,14 +180,16 @@ contract CiphertextCommits is ICiphertextCommits, UUPSUpgradeableEmptyProxy, Gat } /** - * @dev See {ICiphertextCommits-isCiphertextMaterialAdded}. + * @notice See {ICiphertextCommits-isCiphertextMaterialAdded}. */ function isCiphertextMaterialAdded(bytes32 ctHandle) public view virtual returns (bool) { CiphertextCommitsStorage storage $ = _getCiphertextCommitsStorage(); return $.isCiphertextMaterialAdded[ctHandle]; } - /// @notice See {ICiphertextCommits-getCiphertextMaterials}. + /** + * @notice See {ICiphertextCommits-getCiphertextMaterials}. + */ function getCiphertextMaterials( bytes32[] calldata ctHandles ) external view virtual returns (CiphertextMaterial[] memory ctMaterials) { @@ -195,7 +218,9 @@ contract CiphertextCommits is ICiphertextCommits, UUPSUpgradeableEmptyProxy, Gat return ctMaterials; } - /// @notice See {ICiphertextCommits-getSnsCiphertextMaterials}. + /** + * @notice See {ICiphertextCommits-getSnsCiphertextMaterials}. + */ function getSnsCiphertextMaterials( bytes32[] calldata ctHandles ) external view virtual returns (SnsCiphertextMaterial[] memory snsCtMaterials) { @@ -225,7 +250,7 @@ contract CiphertextCommits is ICiphertextCommits, UUPSUpgradeableEmptyProxy, Gat } /** - * @dev See {ICiphertextCommits-getAddCiphertextMaterialConsensusTxSenders}. + * @notice See {ICiphertextCommits-getAddCiphertextMaterialConsensusTxSenders}. * The list remains empty until the consensus is reached. */ function getAddCiphertextMaterialConsensusTxSenders( @@ -241,7 +266,9 @@ contract CiphertextCommits is ICiphertextCommits, UUPSUpgradeableEmptyProxy, Gat return $.coprocessorTxSenderAddresses[addCiphertextHash]; } - /// @notice See {ICiphertextCommits-getVersion}. + /** + * @notice See {ICiphertextCommits-getVersion}. + */ function getVersion() external pure virtual returns (string memory) { return string( @@ -258,22 +285,24 @@ contract CiphertextCommits is ICiphertextCommits, UUPSUpgradeableEmptyProxy, Gat } /** - * @dev Should revert when `msg.sender` is not authorized to upgrade the contract. + * @notice Checks if the sender is authorized to upgrade the contract and reverts otherwise. */ // solhint-disable-next-line no-empty-blocks function _authorizeUpgrade(address _newImplementation) internal virtual override onlyGatewayOwner {} - /// @notice Checks if the consensus is reached among the Coprocessors. - /// @param coprocessorCounter The number of coprocessors that agreed - /// @return Whether the consensus is reached + /** + * @notice Checks if the consensus is reached among the Coprocessors. + * @param coprocessorCounter The number of coprocessors that agreed + * @return Whether the consensus is reached + */ function _isConsensusReached(uint256 coprocessorCounter) internal view virtual returns (bool) { uint256 consensusThreshold = GATEWAY_CONFIG.getCoprocessorMajorityThreshold(); return coprocessorCounter >= consensusThreshold; } /** - * @dev Returns the CiphertextCommits storage location. - * Note that this function is internal but not virtual: derived contracts should be able to + * @notice Returns the CiphertextCommits storage location. + * @dev Note that this function is internal but not virtual: derived contracts should be able to * access it, but if the underlying storage struct version changes, we force them to define a new * getter function and use that one instead in order to avoid overriding the storage location. */ diff --git a/gateway-contracts/contracts/Decryption.sol b/gateway-contracts/contracts/Decryption.sol index 1a385ea83..e73b40e4a 100644 --- a/gateway-contracts/contracts/Decryption.sol +++ b/gateway-contracts/contracts/Decryption.sol @@ -21,11 +21,13 @@ import { Pausable } from "./shared/Pausable.sol"; import { FHETypeBitSizes } from "./libraries/FHETypeBitSizes.sol"; import { HandleOps } from "./libraries/HandleOps.sol"; import { GatewayOwnable } from "./shared/GatewayOwnable.sol"; -import { SnsCiphertextMaterial, CtHandleContractPair, DelegationAccounts } from "./shared/Structs.sol"; +import { SnsCiphertextMaterial, CtHandleContractPair } from "./shared/Structs.sol"; import { PUBLIC_DECRYPT_COUNTER_BASE, USER_DECRYPT_COUNTER_BASE } from "./shared/KMSRequestCounters.sol"; -/// @title Decryption contract -/// @dev See {IDecryption}. +/** + * @title Decryption contract + * @notice See {IDecryption}. + */ contract Decryption is IDecryption, EIP712Upgradeable, @@ -35,9 +37,11 @@ contract Decryption is MultichainACLChecks, Pausable { - /// @notice The typed data structure for the EIP712 signature to validate in public decryption responses. - /// @dev The name of this struct is not relevant for the signature validation, only the one defined - /// @dev EIP712_PUBLIC_DECRYPT_TYPE is, but we keep it the same for clarity. + /** + * @notice The typed data structure for the EIP712 signature to validate in public decryption responses. + * @dev The name of this struct is not relevant for the signature validation, only the one defined + * EIP712_PUBLIC_DECRYPT_TYPE is, but we keep it the same for clarity. + */ struct PublicDecryptVerification { /// @notice The handles of the ciphertexts that have been decrypted. bytes32[] ctHandles; @@ -47,9 +51,11 @@ contract Decryption is bytes extraData; } - /// @notice The typed data structure for the EIP712 signature to validate in user decryption requests. - /// @dev The name of this struct is not relevant for the signature validation, only the one defined - /// @dev EIP712_USER_DECRYPT_REQUEST_TYPE is, but we keep it the same for clarity. + /** + * @notice The typed data structure for the EIP712 signature to validate in user decryption requests. + * @dev The name of this struct is not relevant for the signature validation, only the one defined + * EIP712_USER_DECRYPT_REQUEST_TYPE is, but we keep it the same for clarity. + */ struct UserDecryptRequestVerification { /// @notice The user's public key to be used for reencryption. bytes publicKey; @@ -63,9 +69,11 @@ contract Decryption is bytes extraData; } - /// @notice The typed data structure for the EIP712 signature to validate in user decryption responses. - /// @dev The name of this struct is not relevant for the signature validation, only the one defined - /// @dev EIP712_USER_DECRYPT_RESPONSE_TYPE is, but we keep it the same for clarity. + /** + * @notice The typed data structure for the EIP712 signature to validate in user decryption responses. + * @dev The name of this struct is not relevant for the signature validation, only the one defined + * EIP712_USER_DECRYPT_RESPONSE_TYPE is, but we keep it the same for clarity. + */ struct UserDecryptResponseVerification { /// @notice The user's public key used for the reencryption. bytes publicKey; @@ -77,25 +85,9 @@ contract Decryption is bytes extraData; } - /// @notice The typed data structure for the EIP712 signature to validate in user decryption with delegation requests. - /// @dev The name of this struct is not relevant for the signature validation, only the one defined - /// @dev EIP712_USER_DECRYPT_DELEGATION_REQUEST_TYPE is, but we keep it the same for clarity. - struct DelegatedUserDecryptRequestVerification { - /// @notice The user's public key to be used for reencryption. - bytes publicKey; - /// @notice The contract addresses that verification is requested for. - address[] contractAddresses; - /// @notice The address of the account that delegates access to its handles. - address delegatorAddress; - /// @notice The start timestamp of the user decryption request. - uint256 startTimestamp; - /// @notice The duration in days of the user decryption request after the start timestamp. - uint256 durationDays; - /// @notice Generic bytes metadata for versioned payloads. First byte is for the version. - bytes extraData; - } - - /// @notice The publicKey and ctHandles from user decryption requests used for validations during responses. + /** + * @notice The publicKey and ctHandles from user decryption requests used for validations during responses. + */ struct UserDecryptionPayload { /// @notice The user's public key to be used for reencryption. bytes publicKey; @@ -103,62 +95,85 @@ contract Decryption is bytes32[] ctHandles; } - /// @notice The address of the GatewayConfig contract for checking if a signer is valid + /** + * @notice The address of the GatewayConfig contract for checking if a signer is valid. + */ IGatewayConfig private constant GATEWAY_CONFIG = IGatewayConfig(gatewayConfigAddress); - /// @notice The address of the MultichainACL contract for checking if a decryption requests are allowed + /** + * @notice The address of the MultichainACL contract for checking if a decryption requests are allowed. + */ IMultichainACL private constant MULTICHAIN_ACL = IMultichainACL(multichainACLAddress); - /// @notice The address of the CiphertextCommits contract for getting ciphertext materials. + /** + * @notice The address of the CiphertextCommits contract for getting ciphertext materials. + */ ICiphertextCommits private constant CIPHERTEXT_COMMITS = ICiphertextCommits(ciphertextCommitsAddress); - /// @notice The maximum number of duration days that can be requested for a user decryption. + /** + * @notice The maximum number of duration days that can be requested for a user decryption. + */ uint16 internal constant MAX_USER_DECRYPT_DURATION_DAYS = 365; - /// @notice The maximum number of contracts that can request for user decryption at once. + /** + * @notice The maximum number of contracts that can request for user decryption at once. + */ uint8 internal constant MAX_USER_DECRYPT_CONTRACT_ADDRESSES = 10; - /// @notice The maximum number of bits that can be decrypted in a single public/user decryption request. + /** + * @notice The maximum number of bits that can be decrypted in a single public/user decryption request. + */ uint256 internal constant MAX_DECRYPTION_REQUEST_BITS = 2048; + /** + * @notice The hash of the EIP712Domain structure typed data definition. + */ bytes32 private constant DOMAIN_TYPE_HASH = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"); - /// @notice The definition of the PublicDecryptVerification structure typed data. + /** + * @notice The definition of the PublicDecryptVerification structure typed data. + */ string private constant EIP712_PUBLIC_DECRYPT_TYPE = "PublicDecryptVerification(bytes32[] ctHandles,bytes decryptedResult,bytes extraData)"; - /// @notice The hash of the PublicDecryptVerification structure typed data definition used for signature validation. + /** + * @notice The hash of the PublicDecryptVerification structure typed data definition used for + * signature validation in public decryption requests. + */ bytes32 private constant EIP712_PUBLIC_DECRYPT_TYPE_HASH = keccak256(bytes(EIP712_PUBLIC_DECRYPT_TYPE)); - /// @notice The definition of the UserDecryptRequestVerification structure typed data. + /** + * @notice The definition of the UserDecryptRequestVerification structure typed data. + */ string private constant EIP712_USER_DECRYPT_REQUEST_TYPE = "UserDecryptRequestVerification(bytes publicKey,address[] contractAddresses,uint256 startTimestamp," "uint256 durationDays,bytes extraData)"; - /// @notice The hash of the UserDecryptRequestVerification structure typed data definition - /// @notice used for signature validation. + /** + * @notice The hash of the UserDecryptRequestVerification structure typed data definition + * used for signature validation in user decryption requests. + */ bytes32 private constant EIP712_USER_DECRYPT_REQUEST_TYPE_HASH = keccak256(bytes(EIP712_USER_DECRYPT_REQUEST_TYPE)); - string private constant EIP712_DELEGATED_USER_DECRYPT_REQUEST_TYPE = - "DelegatedUserDecryptRequestVerification(bytes publicKey,address[] contractAddresses,address delegatorAddress," - "uint256 startTimestamp,uint256 durationDays,bytes extraData)"; - - bytes32 private constant EIP712_DELEGATED_USER_DECRYPT_REQUEST_TYPE_HASH = - keccak256(bytes(EIP712_DELEGATED_USER_DECRYPT_REQUEST_TYPE)); - - /// @notice The definition of the UserDecryptResponseVerification structure typed data. + /** + * @notice The definition of the UserDecryptResponseVerification structure typed data. + */ string private constant EIP712_USER_DECRYPT_RESPONSE_TYPE = "UserDecryptResponseVerification(bytes publicKey,bytes32[] ctHandles,bytes userDecryptedShare,bytes extraData)"; - /// @notice The hash of the UserDecryptResponseVerification structure typed data definition - /// @notice used for signature validation. + /** + * @notice The hash of the UserDecryptResponseVerification structure typed data definition + * used for signature validation in user decryption responses. + */ bytes32 private constant EIP712_USER_DECRYPT_RESPONSE_TYPE_HASH = keccak256(bytes(EIP712_USER_DECRYPT_RESPONSE_TYPE)); - /// @dev The following constants are used for versioning the contract. They are made private - /// @dev in order to force derived contracts to consider a different version. Note that - /// @dev they can still define their own private constants with the same name. + /** + * @dev The following constants are used for versioning the contract. They are made private + * in order to force derived contracts to consider a different version. Note that + * they can still define their own private constants with the same name. + */ string private constant CONTRACT_NAME = "Decryption"; uint256 private constant MAJOR_VERSION = 0; uint256 private constant MINOR_VERSION = 1; @@ -172,16 +187,14 @@ contract Decryption is */ uint64 private constant REINITIALIZER_VERSION = 2; - /// @notice The contract's variable storage struct (@dev see ERC-7201) + /** + * @notice The contract's variable storage struct (@dev see ERC-7201) + */ /// @custom:storage-location erc7201:fhevm_gateway.storage.Decryption struct DecryptionStorage { // ---------------------------------------------------------------------------------------------- // Common decryption state variables: // ---------------------------------------------------------------------------------------------- - /// @notice The number of (public, user, delegated user) decryption requests, used to - /// @notice generate request IDs (`decryptionId`). - /// @notice TODO: remove this variable for mainnet - uint256 _decryptionRequestCounter; /// @notice Whether a (public, user, delegated user) decryption is done mapping(uint256 decryptionId => bool decryptionDone) decryptionDone; // prettier-ignore @@ -221,9 +234,11 @@ contract Decryption is uint256 userDecryptionCounter; } - /// @dev Storage location has been computed using the following command: - /// @dev keccak256(abi.encode(uint256(keccak256("fhevm_gateway.storage.Decryption")) - 1)) & - /// @dev ~bytes32(uint256(0xff)) + /** + * @notice Storage location has been computed using the following command: + * keccak256(abi.encode(uint256(keccak256("fhevm_gateway.storage.Decryption")) - 1)) & + * ~bytes32(uint256(0xff)) + */ bytes32 private constant DECRYPTION_STORAGE_LOCATION = 0x68113e68af494c6efd0210fc4bf9ba748d1ffadaa4718217fdf63548c4aee700; @@ -232,9 +247,11 @@ contract Decryption is _disableInitializers(); } - /// @notice Initializes the contract. - /// @dev Contract name and version for EIP712 signature validation are defined here - /// @dev This function needs to be public in order to be called by the UUPS proxy. + /** + * @notice Initializes the contract. + * @dev Contract name and version for EIP712 signature validation are defined here + * This function needs to be public in order to be called by the UUPS proxy. + */ /// @custom:oz-upgrades-validate-as-initializer function initializeFromEmptyProxy() public virtual onlyFromEmptyProxy reinitializer(REINITIALIZER_VERSION) { __EIP712_init(CONTRACT_NAME, "1"); @@ -255,24 +272,26 @@ contract Decryption is /// @custom:oz-upgrades-validate-as-initializer // function reinitializeV2() public virtual reinitializer(REINITIALIZER_VERSION) {} - /// @dev See {IDecryption-publicDecryptionRequest}. + /** + * @notice See {IDecryption-publicDecryptionRequest}. + */ function publicDecryptionRequest( bytes32[] calldata ctHandles, bytes calldata extraData ) external virtual whenNotPaused { - /// @dev Check that the list of handles is not empty + // Check that the list of handles is not empty if (ctHandles.length == 0) { revert EmptyCtHandles(); } - /// @dev Check the handles' conformance + // Check the handles' conformance _checkCtHandlesConformancePublic(ctHandles); - /// @dev Fetch the SNS ciphertexts from the CiphertextCommits contract - /// @dev This call is reverted if any of the ciphertexts are not found in the contract, but - /// @dev this should not happen for now as a ciphertext cannot be allowed for decryption - /// @dev without being added to the contract first (and we currently have no ways of deleting - /// @dev a ciphertext from the contract). + // Fetch the SNS ciphertexts from the CiphertextCommits contract + // This call is reverted if any of the ciphertexts are not found in the contract, but + // this should not happen for now as a ciphertext cannot be allowed for decryption + // without being added to the contract first (and we currently have no ways of deleting + // a ciphertext from the contract). SnsCiphertextMaterial[] memory snsCtMaterials = CIPHERTEXT_COMMITS.getSnsCiphertextMaterials(ctHandles); // Check that received snsCtMaterials have the same keyId. @@ -291,15 +310,17 @@ contract Decryption is $.publicDecryptionCounter++; uint256 publicDecryptionId = $.publicDecryptionCounter; - /// @dev The handles are used during response calls for the EIP712 signature validation. + // The handles are used during response calls for the EIP712 signature validation. $.publicCtHandles[publicDecryptionId] = ctHandles; emit PublicDecryptionRequest(publicDecryptionId, snsCtMaterials, extraData); } - /// @dev See {IDecryption-publicDecryptionResponse}. - /// @dev We restrict this call to KMS transaction senders because, in case of reorgs, we need to - /// @dev prevent anyone else from copying the signature and sending it to trigger a consensus. + /** + * @notice See {IDecryption-publicDecryptionResponse}. + * @dev We restrict this call to KMS transaction senders because, in case of reorgs, we need to + * prevent anyone else from copying the signature and sending it to trigger a consensus. + */ function publicDecryptionResponse( uint256 decryptionId, bytes calldata decryptedResult, @@ -315,25 +336,25 @@ contract Decryption is revert DecryptionNotRequested(decryptionId); } - /// @dev Initialize the PublicDecryptVerification structure for the signature validation. + // Initialize the PublicDecryptVerification structure for the signature validation. PublicDecryptVerification memory publicDecryptVerification = PublicDecryptVerification( $.publicCtHandles[decryptionId], decryptedResult, extraData ); - /// @dev Compute the digest of the PublicDecryptVerification structure. + // Compute the digest of the PublicDecryptVerification structure. bytes32 digest = _hashPublicDecryptVerification(publicDecryptVerification); - /// @dev Recover the signer address from the signature and validate that corresponds to a - /// @dev KMS node that has not already signed. + // Recover the signer address from the signature and validate that corresponds to a + // KMS node that has not already signed. _validateDecryptionResponseEIP712Signature(decryptionId, digest, signature); - /// @dev Store the signature for the public decryption response. - /// @dev This list is then used to check the consensus. Important: the mapping considers - /// @dev the digest (contrary to the user decryption case) as the decrypted result is expected - /// @dev to be the same for all KMS nodes. This allows to filter out results from malicious - /// @dev KMS nodes. + // Store the signature for the public decryption response. + // This list is then used to check the consensus. Important: the mapping considers + // the digest (contrary to the user decryption case) as the decrypted result is expected + // to be the same for all KMS nodes. This allows to filter out results from malicious + // KMS nodes. bytes[] storage verifiedSignatures = $.verifiedPublicDecryptSignatures[decryptionId][digest]; verifiedSignatures.push(signature); @@ -357,7 +378,9 @@ contract Decryption is } } - /// @dev See {IDecryption-userDecryptionRequest}. + /** + * @notice See {IDecryption-userDecryptionRequest}. + */ function userDecryptionRequest( CtHandleContractPair[] calldata ctHandleContractPairs, RequestValidity calldata requestValidity, @@ -377,22 +400,22 @@ contract Decryption is ); } - /// @dev Check the user decryption request is valid. + // Check the user decryption request is valid. _checkUserDecryptionRequestValidity(requestValidity); - /// @dev Check the user address is not included in the contract addresses. + // Check the user address is not included in the contract addresses. if (_containsContractAddress(contractsInfo.addresses, userAddress)) { revert UserAddressInContractAddresses(userAddress, contractsInfo.addresses); } - /// @dev - Extract the handles and check their conformance + // - Extract the handles and check their conformance bytes32[] memory ctHandles = _extractCtHandlesCheckConformanceUser( ctHandleContractPairs, contractsInfo.addresses, userAddress ); - /// @dev Initialize the UserDecryptRequestVerification structure for the signature validation. + // Initialize the UserDecryptRequestVerification structure for the signature validation. UserDecryptRequestVerification memory userDecryptRequestVerification = UserDecryptRequestVerification( publicKey, contractsInfo.addresses, @@ -401,7 +424,7 @@ contract Decryption is extraData ); - /// @dev Validate the received EIP712 signature on the user decryption request. + // Validate the received EIP712 signature on the user decryption request. _validateUserDecryptRequestEIP712Signature( userDecryptRequestVerification, userAddress, @@ -409,11 +432,11 @@ contract Decryption is contractsInfo.chainId ); - /// @dev Fetch the ciphertexts from the CiphertextCommits contract - /// @dev This call is reverted if any of the ciphertexts are not found in the contract, but - /// @dev this should not happen for now as a ciphertext cannot be allowed for decryption - /// @dev without being added to the contract first (and we currently have no ways of deleting - /// @dev a ciphertext from the contract). + // Fetch the ciphertexts from the CiphertextCommits contract + // This call is reverted if any of the ciphertexts are not found in the contract, but + // this should not happen for now as a ciphertext cannot be allowed for decryption + // without being added to the contract first (and we currently have no ways of deleting + // a ciphertext from the contract). SnsCiphertextMaterial[] memory snsCtMaterials = CIPHERTEXT_COMMITS.getSnsCiphertextMaterials(ctHandles); // Check that received snsCtMaterials have the same keyId. @@ -433,109 +456,17 @@ contract Decryption is $.userDecryptionCounter++; uint256 userDecryptionId = $.userDecryptionCounter; - /// @dev The publicKey and ctHandles are used during response calls for the EIP712 signature validation. + // The publicKey and ctHandles are used during response calls for the EIP712 signature validation. $.userDecryptionPayloads[userDecryptionId] = UserDecryptionPayload(publicKey, ctHandles); emit UserDecryptionRequest(userDecryptionId, snsCtMaterials, userAddress, publicKey, extraData); } - /// @dev See {IDecryption-userDecryptionWithDelegationRequest}. - function delegatedUserDecryptionRequest( - CtHandleContractPair[] calldata ctHandleContractPairs, - RequestValidity calldata requestValidity, - DelegationAccounts calldata delegationAccounts, - ContractsInfo calldata contractsInfo, - bytes calldata publicKey, - bytes calldata signature, - bytes calldata extraData - ) external virtual whenNotPaused { - if (contractsInfo.addresses.length == 0) { - revert EmptyContractAddresses(); - } - if (contractsInfo.addresses.length > MAX_USER_DECRYPT_CONTRACT_ADDRESSES) { - revert ContractAddressesMaxLengthExceeded( - MAX_USER_DECRYPT_CONTRACT_ADDRESSES, - contractsInfo.addresses.length - ); - } - - /// @dev Check the user decryption request is valid. - _checkUserDecryptionRequestValidity(requestValidity); - - /// @dev Check the delegator address is not included in the contract addresses. - if (_containsContractAddress(contractsInfo.addresses, delegationAccounts.delegatorAddress)) { - revert DelegatorAddressInContractAddresses(delegationAccounts.delegatorAddress, contractsInfo.addresses); - } - - /// @dev - Extract the handles and check their conformance - bytes32[] memory ctHandles = _extractCtHandlesCheckConformanceUser( - ctHandleContractPairs, - contractsInfo.addresses, - delegationAccounts.delegatorAddress - ); - - // Check that the delegated address has been granted access to the contract addresses by - // by the delegator. - _checkIsAccountDelegated(contractsInfo.chainId, delegationAccounts, contractsInfo.addresses); - - /// @dev Initialize the EIP712UserDecryptRequest structure for the signature validation. - DelegatedUserDecryptRequestVerification - memory delegatedUserDecryptRequestVerification = DelegatedUserDecryptRequestVerification( - publicKey, - contractsInfo.addresses, - delegationAccounts.delegatorAddress, - requestValidity.startTimestamp, - requestValidity.durationDays, - extraData - ); - - /// @dev Validate the received EIP712 signature on the user decryption request. - _validateDelegatedUserDecryptRequestEIP712Signature( - delegatedUserDecryptRequestVerification, - delegationAccounts.delegatedAddress, - signature, - contractsInfo.chainId - ); - - /// @dev Fetch the ciphertexts from the CiphertextCommits contract - /// @dev This call is reverted if any of the ciphertexts are not found in the contract, but - /// @dev this should not happen for now as a ciphertext cannot be allowed for decryption - /// @dev without being added to the contract first (and we currently have no ways of deleting - /// @dev a ciphertext from the contract). - SnsCiphertextMaterial[] memory snsCtMaterials = CIPHERTEXT_COMMITS.getSnsCiphertextMaterials(ctHandles); - - // Check that received snsCtMaterials have the same keyId. - // TODO: This should be removed once batched decryption requests with different keys is - // supported by the KMS (see https://github.com/zama-ai/fhevm-internal/issues/376) - _checkCtMaterialKeyIds(snsCtMaterials); - - DecryptionStorage storage $ = _getDecryptionStorage(); - - // Generate a globally unique decryptionId for the delegated user decryption request. - // The counter is initialized at deployment such that decryptionId's first byte uniquely - // represents a user decryption request (including delegated user decryption requests), - // with format: [0000 0010 | counter_1..31] - // This counter is used to ensure the IDs' uniqueness, as there is no proper way - // of generating truly pseudo-random numbers on-chain on Arbitrum. This has some impact on - // how IDs need to be handled off-chain in case of re-org. - $.userDecryptionCounter++; - uint256 userDecryptionId = $.userDecryptionCounter; - - /// @dev The publicKey and ctHandles are used during response calls for the EIP712 signature validation. - $.userDecryptionPayloads[userDecryptionId] = UserDecryptionPayload(publicKey, ctHandles); - - emit UserDecryptionRequest( - userDecryptionId, - snsCtMaterials, - delegationAccounts.delegatedAddress, - publicKey, - extraData - ); - } - - /// @dev See {IDecryption-userDecryptionResponse}. - /// @dev We restrict this call to KMS transaction senders because, in case of reorgs, we need to - /// @dev prevent anyone else from copying the signature and sending it to trigger a consensus. + /** + * @notice See {IDecryption-userDecryptionResponse}. + * @dev We restrict this call to KMS transaction senders because, in case of reorgs, we need to + * prevent anyone else from copying the signature and sending it to trigger a consensus. + */ function userDecryptionResponse( uint256 decryptionId, bytes calldata userDecryptedShare, @@ -552,7 +483,7 @@ contract Decryption is } UserDecryptionPayload memory userDecryptionPayload = $.userDecryptionPayloads[decryptionId]; - /// @dev Initialize the UserDecryptResponseVerification structure for the signature validation. + // Initialize the UserDecryptResponseVerification structure for the signature validation. UserDecryptResponseVerification memory userDecryptResponseVerification = UserDecryptResponseVerification( userDecryptionPayload.publicKey, userDecryptionPayload.ctHandles, @@ -560,11 +491,11 @@ contract Decryption is extraData ); - /// @dev Compute the digest of the UserDecryptResponseVerification structure. + // Compute the digest of the UserDecryptResponseVerification structure. bytes32 digest = _hashUserDecryptResponseVerification(userDecryptResponseVerification); - /// @dev Recover the signer address from the signature and validate that it corresponds to a - /// @dev KMS node that has not already signed. + // Recover the signer address from the signature and validate that it corresponds to a + // KMS node that has not already signed. _validateDecryptionResponseEIP712Signature(decryptionId, digest, signature); // Store the KMS transaction sender address for the public decryption response @@ -644,43 +575,7 @@ contract Decryption is } /** - * @dev See {IDecryption-isDelegatedUserDecryptionReady}. - */ - function isDelegatedUserDecryptionReady( - uint256 contractsChainId, - DelegationAccounts calldata delegationAccounts, - CtHandleContractPair[] calldata ctHandleContractPairs, - address[] calldata contractAddresses, - bytes calldata /* extraData */ - ) external view virtual returns (bool) { - // Check that the delegated address has been granted access to the given contractAddresses - // by the delegator. - if (!MULTICHAIN_ACL.isAccountDelegated(contractsChainId, delegationAccounts, contractAddresses)) { - return false; - } - - // For each handle, check that the delegator and contract accounts have access to it and that the - // ciphertext material represented by it has been added. - for (uint256 i = 0; i < ctHandleContractPairs.length; i++) { - if ( - !MULTICHAIN_ACL.isAccountAllowed( - ctHandleContractPairs[i].ctHandle, - delegationAccounts.delegatorAddress - ) || - !MULTICHAIN_ACL.isAccountAllowed( - ctHandleContractPairs[i].ctHandle, - ctHandleContractPairs[i].contractAddress - ) || - !CIPHERTEXT_COMMITS.isCiphertextMaterialAdded(ctHandleContractPairs[i].ctHandle) - ) { - return false; - } - } - return true; - } - - /** - * @dev See {IDecryption-isDecryptionDone}. + * @notice See {IDecryption-isDecryptionDone}. */ function isDecryptionDone(uint256 decryptionId) external view virtual returns (bool) { DecryptionStorage storage $ = _getDecryptionStorage(); @@ -688,7 +583,7 @@ contract Decryption is } /** - * @dev See {IDecryption-getDecryptionConsensusTxSenders}. + * @notice See {IDecryption-getDecryptionConsensusTxSenders}. * For public decryption, the returned list remains empty until the consensus is reached. */ function getDecryptionConsensusTxSenders(uint256 decryptionId) external view virtual returns (address[] memory) { @@ -703,7 +598,9 @@ contract Decryption is return $.consensusTxSenderAddresses[decryptionId][consensusDigest]; } - /// @dev See {IDecryption-getVersion}. + /** + * @notice See {IDecryption-getVersion}. + */ function getVersion() external pure virtual returns (string memory) { return string( @@ -719,10 +616,12 @@ contract Decryption is ); } - /// @notice Validates the EIP712 signature for a given decryption response. - /// @param decryptionId The decryption request ID. - /// @param digest The hashed EIP712 struct. - /// @param signature The signature to validate. + /** + * @notice Validates the EIP712 signature for a given decryption response. + * @param decryptionId The decryption request ID. + * @param digest The hashed EIP712 struct. + * @param signature The signature to validate. + */ function _validateDecryptionResponseEIP712Signature( uint256 decryptionId, bytes32 digest, @@ -734,7 +633,7 @@ contract Decryption is // Check that the signer is a KMS signer. _checkIsKmsSigner(signer); - /// @dev Check that the signer has not already responded to the user decryption request. + // Check that the signer has not already responded to the user decryption request. if ($.kmsNodeAlreadySigned[decryptionId][signer]) { revert KmsNodeAlreadySigned(decryptionId, signer); } @@ -743,17 +642,19 @@ contract Decryption is } /** - * @dev Should revert when `msg.sender` is not authorized to upgrade the contract. + * @notice Checks if the sender is authorized to upgrade the contract and reverts otherwise. */ // solhint-disable-next-line no-empty-blocks function _authorizeUpgrade(address _newImplementation) internal virtual override onlyGatewayOwner {} - /// @notice Validates the EIP712 signature for a given user decryption request - /// @dev This function checks that the signer address is the same as the user address. - /// @param userDecryptRequestVerification The signed UserDecryptRequestVerification structure - /// @param userAddress The address of the user. - /// @param signature The signature to be validated - /// @param contractsChainId The chain ID of the contracts. + /** + * @notice Validates the EIP712 signature for a given user decryption request + * @dev This function checks that the signer address is the same as the user address. + * @param userDecryptRequestVerification The signed UserDecryptRequestVerification structure + * @param userAddress The address of the user. + * @param signature The signature to be validated + * @param contractsChainId The chain ID of the contracts. + */ function _validateUserDecryptRequestEIP712Signature( UserDecryptRequestVerification memory userDecryptRequestVerification, address userAddress, @@ -767,31 +668,11 @@ contract Decryption is } } - /// @notice Validates the EIP712 signature for a given user decryption request - /// @dev This function checks that the signer address is the same as the delegated address. - /// @param delegatedUserDecryptRequestVerification The signed DelegatedUserDecryptRequestVerification structure - /// @param delegatedAddress The address of the delegated user. - /// @param signature The signature to be validated - /// @param contractsChainId The chain ID of the contracts. - function _validateDelegatedUserDecryptRequestEIP712Signature( - DelegatedUserDecryptRequestVerification memory delegatedUserDecryptRequestVerification, - address delegatedAddress, - bytes calldata signature, - uint256 contractsChainId - ) internal view virtual { - bytes32 digest = _hashDelegatedUserDecryptRequestVerification( - delegatedUserDecryptRequestVerification, - contractsChainId - ); - address signer = ECDSA.recover(digest, signature); - if (signer != delegatedAddress) { - revert InvalidUserSignature(signature); - } - } - - /// @notice Computes the hash of a given PublicDecryptVerification structured data - /// @param publicDecryptVerification The PublicDecryptVerification structure - /// @return The hash of the PublicDecryptVerification structure + /** + * @notice Computes the hash of a given PublicDecryptVerification structured data + * @param publicDecryptVerification The PublicDecryptVerification structure + * @return The hash of the PublicDecryptVerification structure + */ function _hashPublicDecryptVerification( PublicDecryptVerification memory publicDecryptVerification ) internal view virtual returns (bytes32) { @@ -808,10 +689,12 @@ contract Decryption is ); } - /// @notice Computes the hash of the hashed struct using a custom chain ID for the eip712 domain - /// @param chainId The chain ID - /// @param structHash The hash of the struct - /// @dev This could be improved along https://github.com/zama-ai/fhevm/issues/424 + /** + * @notice Computes the hash of the hashed struct using a custom chain ID for the eip712 domain + * @param chainId The chain ID + * @param structHash The hash of the struct + * @dev This could be improved along https://github.com/zama-ai/fhevm/issues/424 + */ function _hashTypedDataV4CustomChainId( uint256 chainId, bytes32 structHash @@ -822,10 +705,12 @@ contract Decryption is return MessageHashUtils.toTypedDataHash(domainSeparatorV4, structHash); } - /// @notice Computes the hash of a given UserDecryptRequestVerification structured data. - /// @param userDecryptRequestVerification The UserDecryptRequestVerification structure to hash. - /// @param contractsChainId The chain ID of the contracts. - /// @return The hash of the UserDecryptRequestVerification structure. + /** + * @notice Computes the hash of a given UserDecryptRequestVerification structured data. + * @param userDecryptRequestVerification The UserDecryptRequestVerification structure to hash. + * @param contractsChainId The chain ID of the contracts. + * @return The hash of the UserDecryptRequestVerification structure. + */ function _hashUserDecryptRequestVerification( UserDecryptRequestVerification memory userDecryptRequestVerification, uint256 contractsChainId @@ -843,31 +728,11 @@ contract Decryption is return _hashTypedDataV4CustomChainId(contractsChainId, structHash); } - /// @notice Computes the hash of a given DelegatedUserDecryptRequestVerification structured data. - /// @param delegatedUserDecryptRequestVerification The DelegatedUserDecryptRequestVerification structure to hash. - /// @param contractsChainId The chain ID of the contracts. - /// @return The hash of the DelegatedUserDecryptRequestVerification structure. - function _hashDelegatedUserDecryptRequestVerification( - DelegatedUserDecryptRequestVerification memory delegatedUserDecryptRequestVerification, - uint256 contractsChainId - ) internal view virtual returns (bytes32) { - bytes32 structHash = keccak256( - abi.encode( - EIP712_DELEGATED_USER_DECRYPT_REQUEST_TYPE_HASH, - keccak256(delegatedUserDecryptRequestVerification.publicKey), - keccak256(abi.encodePacked(delegatedUserDecryptRequestVerification.contractAddresses)), - delegatedUserDecryptRequestVerification.delegatorAddress, - delegatedUserDecryptRequestVerification.startTimestamp, - delegatedUserDecryptRequestVerification.durationDays, - keccak256(abi.encodePacked(delegatedUserDecryptRequestVerification.extraData)) - ) - ); - return _hashTypedDataV4CustomChainId(contractsChainId, structHash); - } - - /// @notice Computes the hash of a given UserDecryptResponseVerification structured data. - /// @param userDecryptResponseVerification The UserDecryptResponseVerification structure to hash. - /// @return The hash of the UserDecryptResponseVerification structure. + /** + * @notice Computes the hash of a given UserDecryptResponseVerification structured data. + * @param userDecryptResponseVerification The UserDecryptResponseVerification structure to hash. + * @return The hash of the UserDecryptResponseVerification structure. + */ function _hashUserDecryptResponseVerification( UserDecryptResponseVerification memory userDecryptResponseVerification ) internal view virtual returns (bytes32) { @@ -885,67 +750,75 @@ contract Decryption is ); } - /// @notice Indicates if the consensus is reached for public decryption. - /// @param numVerifiedResponses The number of public decryption responses that have been verified. - /// @return Whether the consensus has been reached + /** + * @notice Indicates if the consensus is reached for public decryption. + * @param numVerifiedResponses The number of public decryption responses that have been verified. + * @return Whether the consensus has been reached + */ function _isConsensusReachedPublic(uint256 numVerifiedResponses) internal view virtual returns (bool) { uint256 publicDecryptionThreshold = GATEWAY_CONFIG.getPublicDecryptionThreshold(); return numVerifiedResponses >= publicDecryptionThreshold; } - /// @notice Indicates if the number of verified user decryption responses has reached the threshold. - /// @param numVerifiedResponses The number of user decryption responses that have been verified. - /// @return Whether the threshold has been reached. + /** + * @notice Indicates if the number of verified user decryption responses has reached the threshold. + * @param numVerifiedResponses The number of user decryption responses that have been verified. + * @return Whether the threshold has been reached. + */ function _isThresholdReachedUser(uint256 numVerifiedResponses) internal view virtual returns (bool) { uint256 userDecryptionThreshold = GATEWAY_CONFIG.getUserDecryptionThreshold(); return numVerifiedResponses >= userDecryptionThreshold; } - /// @notice Check the handles' conformance for public decryption requests. - /// @dev Checks include: - /// @dev - Total bit size for each handle - /// @dev - FHE type validity for each handle - /// @dev - Handles are allowed for public decryption - /// @param ctHandles The list of ciphertext handles + /** + * @notice Check the handles' conformance for public decryption requests. + * @dev Checks include: + * @dev - Total bit size for each handle + * @dev - FHE type validity for each handle + * @dev - Handles are allowed for public decryption + * @param ctHandles The list of ciphertext handles + */ function _checkCtHandlesConformancePublic(bytes32[] memory ctHandles) internal view virtual { uint256 totalBitSize = 0; for (uint256 i = 0; i < ctHandles.length; i++) { bytes32 ctHandle = ctHandles[i]; - /// @dev Extract the FHE type from the ciphertext handle + // Extract the FHE type from the ciphertext handle FheType fheType = HandleOps.extractFheType(ctHandle); - /// @dev Add the bit size of the FHE type to the total bit size - /// @dev This reverts if the FHE type is invalid or not supported. + // Add the bit size of the FHE type to the total bit size + // This reverts if the FHE type is invalid or not supported. totalBitSize += FHETypeBitSizes.getBitSize(fheType); // Check that the handles are allowed for public decryption. _checkIsPublicDecryptAllowed(ctHandle); } - /// @dev Revert if the total bit size exceeds the maximum allowed. + // Revert if the total bit size exceeds the maximum allowed. if (totalBitSize > MAX_DECRYPTION_REQUEST_BITS) { revert MaxDecryptionRequestBitSizeExceeded(MAX_DECRYPTION_REQUEST_BITS, totalBitSize); } } - /// @notice Extracts the handles and check their conformance for user decryption requests. - /// @dev Checks include: - /// @dev - Total bit size for each handle - /// @dev - FHE type validity for each handle - /// @dev - Contract addresses have access to the handles - /// @dev - Allowed address has access to the handles - /// @dev - Contract address inclusion in the list of allowed contract addresses - /// @param ctHandleContractPairs The list of ciphertext handles and contract addresses - /// @param contractAddresses The list of allowed contract addresses - /// @param allowedAddress The address that is allowed to access the handles - /// @return ctHandles The list of ciphertext handles + /** + * @notice Extracts the handles and check their conformance for user decryption requests. + * @dev Checks include: + * @dev - Total bit size for each handle + * @dev - FHE type validity for each handle + * @dev - Contract addresses have access to the handles + * @dev - Allowed address has access to the handles + * @dev - Contract address inclusion in the list of allowed contract addresses + * @param ctHandleContractPairs The list of ciphertext handles and contract addresses + * @param contractAddresses The list of allowed contract addresses + * @param allowedAddress The address that is allowed to access the handles + * @return ctHandles The list of ciphertext handles + */ function _extractCtHandlesCheckConformanceUser( CtHandleContractPair[] calldata ctHandleContractPairs, address[] memory contractAddresses, address allowedAddress ) internal view virtual returns (bytes32[] memory ctHandles) { - /// @dev Check that the list of ctHandleContractPair is not empty + // Check that the list of ctHandleContractPair is not empty if (ctHandleContractPairs.length == 0) { revert EmptyCtHandleContractPairs(); } @@ -957,18 +830,18 @@ contract Decryption is bytes32 ctHandle = ctHandleContractPairs[i].ctHandle; address contractAddress = ctHandleContractPairs[i].contractAddress; - /// @dev Extract the FHE type from the ciphertext handle + // Extract the FHE type from the ciphertext handle FheType fheType = HandleOps.extractFheType(ctHandle); - /// @dev Add the bit size of the FHE type to the total bit size - /// @dev This reverts if the FHE type is invalid or not supported + // Add the bit size of the FHE type to the total bit size + // This reverts if the FHE type is invalid or not supported totalBitSize += FHETypeBitSizes.getBitSize(fheType); // Check that the allowed and contract accounts have access to the handles. _checkIsAccountAllowed(ctHandle, allowedAddress); _checkIsAccountAllowed(ctHandle, contractAddress); - /// @dev Check the contract is included in the list of allowed contract addresses. + // Check the contract is included in the list of allowed contract addresses. if (!_containsContractAddress(contractAddresses, contractAddress)) { revert ContractNotInContractAddresses(contractAddress, contractAddresses); } @@ -976,42 +849,46 @@ contract Decryption is ctHandles[i] = ctHandle; } - /// @dev Revert if the total bit size exceeds the maximum allowed. + // Revert if the total bit size exceeds the maximum allowed. if (totalBitSize > MAX_DECRYPTION_REQUEST_BITS) { revert MaxDecryptionRequestBitSizeExceeded(MAX_DECRYPTION_REQUEST_BITS, totalBitSize); } } - /// @notice Checks if a user decryption request's start timestamp and duration days are valid. - /// @param requestValidity The RequestValidity structure + /** + * @notice Checks if a user decryption request's start timestamp and duration days are valid. + * @param requestValidity The RequestValidity structure + */ function _checkUserDecryptionRequestValidity(RequestValidity memory requestValidity) internal view virtual { - /// @dev Check the durationDays is not null. + // Check the durationDays is not null. if (requestValidity.durationDays == 0) { revert InvalidNullDurationDays(); } - /// @dev Check the durationDays does not exceed the maximum allowed. + // Check the durationDays does not exceed the maximum allowed. if (requestValidity.durationDays > MAX_USER_DECRYPT_DURATION_DAYS) { revert MaxDurationDaysExceeded(MAX_USER_DECRYPT_DURATION_DAYS, requestValidity.durationDays); } - /// @dev Check the start timestamp is not set in the future. This is to prevent a user - /// @dev from bypassing the durationDays limit of 365 days by setting a start timestamp - /// @dev far in the future. + // Check the start timestamp is not set in the future. This is to prevent a user + // from bypassing the durationDays limit of 365 days by setting a start timestamp + // far in the future. if (requestValidity.startTimestamp > block.timestamp) { revert StartTimestampInFuture(block.timestamp, requestValidity.startTimestamp); } - /// @dev Check the user decryption request has not expired. A user decryption request is valid - /// @dev from startTimestamp for a number of days equal to durationDays. + // Check the user decryption request has not expired. A user decryption request is valid + // from startTimestamp for a number of days equal to durationDays. if (requestValidity.startTimestamp + requestValidity.durationDays * 1 days < block.timestamp) { revert UserDecryptionRequestExpired(block.timestamp, requestValidity); } } - /// @notice Checks if a given contractAddress is included in the contractAddresses list. - /// @param contractAddresses The list of contract addresses - /// @param contractAddress The contract address to check - /// @return Whether the contract address is included in the list + /** + * @notice Checks if a given contractAddress is included in the contractAddresses list. + * @param contractAddresses The list of contract addresses + * @param contractAddress The contract address to check + * @return Whether the contract address is included in the list + */ function _containsContractAddress( address[] memory contractAddresses, address contractAddress @@ -1042,8 +919,8 @@ contract Decryption is } /** - * @dev Returns the Decryption storage location. - * Note that this function is internal but not virtual: derived contracts should be able to + * @notice Returns the Decryption storage location. + * @dev Note that this function is internal but not virtual: derived contracts should be able to * access it, but if the underlying storage struct version changes, we force them to define a new * getter function and use that one instead in order to avoid overriding the storage location. */ diff --git a/gateway-contracts/contracts/GatewayConfig.sol b/gateway-contracts/contracts/GatewayConfig.sol index f0bb8e257..1d997ea01 100644 --- a/gateway-contracts/contracts/GatewayConfig.sol +++ b/gateway-contracts/contracts/GatewayConfig.sol @@ -14,21 +14,25 @@ import { ProtocolMetadata, HostChain, Coprocessor, Custodian, KmsNode } from "./ /** * @title GatewayConfig contract - * @dev See {IGatewayConfig}. + * @notice See {IGatewayConfig}. * @dev Add/remove methods will be added in the future for KMS nodes, coprocessors and host chains. - * @dev See https://github.com/zama-ai/fhevm-gateway/issues/98 for more details. + * See https://github.com/zama-ai/fhevm-gateway/issues/98 for more details. */ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeableEmptyProxy { - /// @notice The maximum chain ID. + /** + * @notice The maximum chain ID. + */ uint256 internal constant MAX_CHAIN_ID = type(uint64).max; // ---------------------------------------------------------------------------------------------- // Contract information: // ---------------------------------------------------------------------------------------------- - /// @dev The following constants are used for versioning the contract. They are made private - /// @dev in order to force derived contracts to consider a different version. Note that - /// @dev they can still define their own private constants with the same name. + /** + * @dev The following constants are used for versioning the contract. They are made private + * in order to force derived contracts to consider a different version. Note that + * they can still define their own private constants with the same name. + */ string private constant CONTRACT_NAME = "GatewayConfig"; uint256 private constant MAJOR_VERSION = 0; uint256 private constant MINOR_VERSION = 1; @@ -42,12 +46,16 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab */ uint64 private constant REINITIALIZER_VERSION = 2; - /// @notice The address of the all gateway contracts + /** + * @notice The address of the all gateway contracts + */ Decryption private constant DECRYPTION = Decryption(decryptionAddress); InputVerification private constant INPUT_VERIFICATION = InputVerification(inputVerificationAddress); IPauserSet private constant PAUSER_SET = IPauserSet(pauserSetAddress); - /// @notice The contract's variable storage struct (@dev see ERC-7201) + /** + * @notice The contract's variable storage struct (@dev see ERC-7201) + */ /// @custom:storage-location erc7201:fhevm_gateway.storage.GatewayConfig struct GatewayConfigStorage { // ---------------------------------------------------------------------------------------------- @@ -111,9 +119,11 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab uint256 kmsGenThreshold; } - /// @dev Storage location has been computed using the following command: - /// @dev keccak256(abi.encode(uint256(keccak256("fhevm_gateway.storage.GatewayConfig")) - 1)) - /// @dev & ~bytes32(uint256(0xff)) + /** + * @dev Storage location has been computed using the following command: + * keccak256(abi.encode(uint256(keccak256("fhevm_gateway.storage.GatewayConfig")) - 1)) + * & ~bytes32(uint256(0xff)) + */ bytes32 private constant GATEWAY_CONFIG_STORAGE_LOCATION = 0x86d3070a8993f6b209bee6185186d38a07fce8bbd97c750d934451b72f35b400; @@ -129,15 +139,18 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab _; } - /// @notice Initializes the contract - /// @dev This function needs to be public in order to be called by the UUPS proxy. - /// @param initialMetadata Metadata of the protocol - /// @param initialMpcThreshold The MPC threshold - /// @param initialPublicDecryptionThreshold The public decryption threshold - /// @param initialUserDecryptionThreshold The user decryption threshold - /// @param initialKmsNodes List of KMS nodes - /// @param initialCoprocessors List of coprocessors - /// @param initialCustodians List of custodians + /** + * @notice Initializes the contract + * @dev This function needs to be public in order to be called by the UUPS proxy. + * @param initialMetadata Metadata of the protocol + * @param initialMpcThreshold The MPC threshold + * @param initialPublicDecryptionThreshold The public decryption threshold + * @param initialUserDecryptionThreshold The user decryption threshold + * @param initialKmsGenThreshold The KMS generation threshold + * @param initialKmsNodes List of KMS nodes + * @param initialCoprocessors List of coprocessors + * @param initialCustodians List of custodians + */ /// @custom:oz-upgrades-validate-as-initializer function initializeFromEmptyProxy( ProtocolMetadata memory initialMetadata, @@ -166,7 +179,7 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab GatewayConfigStorage storage $ = _getGatewayConfigStorage(); $.protocolMetadata = initialMetadata; - /// @dev Register the KMS nodes + // Register the KMS nodes for (uint256 i = 0; i < initialKmsNodes.length; i++) { $.isKmsTxSender[initialKmsNodes[i].txSenderAddress] = true; $.kmsNodes[initialKmsNodes[i].txSenderAddress] = initialKmsNodes[i]; @@ -175,14 +188,14 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab $.kmsSignerAddresses.push(initialKmsNodes[i].signerAddress); } - /// @dev Setting the threshold should be done after the KMS nodes have been registered as the functions - /// @dev reading the `kmsSignerAddresses` array. + // Setting the threshold should be done after the KMS nodes have been registered as the functions + // reading the `kmsSignerAddresses` array. _setMpcThreshold(initialMpcThreshold); _setPublicDecryptionThreshold(initialPublicDecryptionThreshold); _setUserDecryptionThreshold(initialUserDecryptionThreshold); _setKmsGenThreshold(initialKmsGenThreshold); - /// @dev Register the coprocessors + // Register the coprocessors for (uint256 i = 0; i < initialCoprocessors.length; i++) { $.isCoprocessorTxSender[initialCoprocessors[i].txSenderAddress] = true; $.coprocessors[initialCoprocessors[i].txSenderAddress] = initialCoprocessors[i]; @@ -191,7 +204,7 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab $.coprocessorSignerAddresses.push(initialCoprocessors[i].signerAddress); } - /// @dev Register the custodians + // Register the custodians for (uint256 i = 0; i < initialCustodians.length; i++) { $.custodians[initialCustodians[i].txSenderAddress] = initialCustodians[i]; $.custodianTxSenderAddresses.push(initialCustodians[i].txSenderAddress); @@ -217,36 +230,48 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab /// @custom:oz-upgrades-validate-as-initializer // function reinitializeV2() public virtual reinitializer(REINITIALIZER_VERSION) {} - /// @dev See {IGatewayConfig-isPauser}. + /** + * @notice See {IGatewayConfig-isPauser}. + */ function isPauser(address account) public view virtual returns (bool) { return PAUSER_SET.isPauser(account); } - /// @dev See {IGatewayConfig-updateMpcThreshold}. + /** + * @notice See {IGatewayConfig-updateMpcThreshold}. + */ function updateMpcThreshold(uint256 newMpcThreshold) external virtual onlyOwner { _setMpcThreshold(newMpcThreshold); emit UpdateMpcThreshold(newMpcThreshold); } - /// @dev See {IGatewayConfig-updatePublicDecryptionThreshold}. + /** + * @notice See {IGatewayConfig-updatePublicDecryptionThreshold}. + */ function updatePublicDecryptionThreshold(uint256 newPublicDecryptionThreshold) external virtual onlyOwner { _setPublicDecryptionThreshold(newPublicDecryptionThreshold); emit UpdatePublicDecryptionThreshold(newPublicDecryptionThreshold); } - /// @dev See {IGatewayConfig-updateUserDecryptionThreshold}. + /** + * @notice See {IGatewayConfig-updateUserDecryptionThreshold}. + */ function updateUserDecryptionThreshold(uint256 newUserDecryptionThreshold) external virtual onlyOwner { _setUserDecryptionThreshold(newUserDecryptionThreshold); emit UpdateUserDecryptionThreshold(newUserDecryptionThreshold); } - /// @dev See {IGatewayConfig-updateKmsGenThreshold}. + /** + * @notice See {IGatewayConfig-updateKmsGenThreshold}. + */ function updateKmsGenThreshold(uint256 newKmsGenThreshold) external virtual onlyOwner { _setKmsGenThreshold(newKmsGenThreshold); emit UpdateKmsGenThreshold(newKmsGenThreshold); } - /// @dev See {IGatewayConfig-addHostChain}. + /** + * @notice See {IGatewayConfig-addHostChain}. + */ function addHostChain(HostChain calldata hostChain) external virtual onlyOwner { if (hostChain.chainId == 0) { revert InvalidNullChainId(); @@ -266,7 +291,7 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab } /** - * @dev See {IGatewayConfig-pauseAllGatewayContracts}. + * @notice See {IGatewayConfig-pauseAllGatewayContracts}. * Contracts that are technically pausable but do not provide any pausable functions are not * paused. If at least one of the contracts is already paused, the function will revert. */ @@ -277,7 +302,7 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab } /** - * @dev See {IGatewayConfig-unpauseAllGatewayContracts}. + * @notice See {IGatewayConfig-unpauseAllGatewayContracts}. * If at least one of the contracts is not paused, the function will revert. */ function unpauseAllGatewayContracts() external virtual onlyOwner { @@ -287,7 +312,7 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab } /** - * @dev See {IGatewayConfig-isKmsTxSender}. + * @notice See {IGatewayConfig-isKmsTxSender}. */ function isKmsTxSender(address txSenderAddress) external view virtual returns (bool) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); @@ -295,7 +320,7 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab } /** - * @dev See {IGatewayConfig-isKmsSigner}. + * @notice See {IGatewayConfig-isKmsSigner}. */ function isKmsSigner(address signerAddress) external view virtual returns (bool) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); @@ -303,7 +328,7 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab } /** - * @dev See {IGatewayConfig-isCoprocessorTxSender}. + * @notice See {IGatewayConfig-isCoprocessorTxSender}. */ function isCoprocessorTxSender(address txSenderAddress) external view virtual returns (bool) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); @@ -311,7 +336,7 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab } /** - * @dev See {IGatewayConfig-isCoprocessorSigner}. + * @notice See {IGatewayConfig-isCoprocessorSigner}. */ function isCoprocessorSigner(address signerAddress) external view virtual returns (bool) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); @@ -319,7 +344,7 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab } /** - * @dev See {IGatewayConfig-isCustodianTxSender}. + * @notice See {IGatewayConfig-isCustodianTxSender}. */ function isCustodianTxSender(address txSenderAddress) external view virtual returns (bool) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); @@ -327,7 +352,7 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab } /** - * @dev See {IGatewayConfig-isCustodianSigner}. + * @notice See {IGatewayConfig-isCustodianSigner}. */ function isCustodianSigner(address signerAddress) external view virtual returns (bool) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); @@ -335,116 +360,152 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab } /** - * @dev See {IGatewayConfig-isHostChainRegistered}. + * @notice See {IGatewayConfig-isHostChainRegistered}. */ function isHostChainRegistered(uint256 chainId) external view virtual returns (bool) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.isHostChainRegistered[chainId]; } - /// @dev See {IGatewayConfig-getProtocolMetadata}. + /** + * @notice See {IGatewayConfig-getProtocolMetadata}. + */ function getProtocolMetadata() external view virtual returns (ProtocolMetadata memory) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.protocolMetadata; } - /// @dev See {IGatewayConfig-getMpcThreshold}. + /** + * @notice See {IGatewayConfig-getMpcThreshold}. + */ function getMpcThreshold() external view virtual returns (uint256) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.mpcThreshold; } - /// @dev See {IGatewayConfig-getPublicDecryptionThreshold}. + /** + * @notice See {IGatewayConfig-getPublicDecryptionThreshold}. + */ function getPublicDecryptionThreshold() external view virtual returns (uint256) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.publicDecryptionThreshold; } - /// @dev See {IGatewayConfig-getUserDecryptionThreshold}. + /** + * @notice See {IGatewayConfig-getUserDecryptionThreshold}. + */ function getUserDecryptionThreshold() external view virtual returns (uint256) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.userDecryptionThreshold; } - /// @dev See {IGatewayConfig-getKmsGenThreshold}. + /** + * @notice See {IGatewayConfig-getKmsGenThreshold}. + */ function getKmsGenThreshold() external view virtual returns (uint256) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.kmsGenThreshold; } - /// @dev See {IGatewayConfig-getCoprocessorMajorityThreshold}. + /** + * @notice See {IGatewayConfig-getCoprocessorMajorityThreshold}. + */ function getCoprocessorMajorityThreshold() external view virtual returns (uint256) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.coprocessorTxSenderAddresses.length / 2 + 1; } - /// @dev See {IGatewayConfig-getKmsNode}. + /** + * @notice See {IGatewayConfig-getKmsNode}. + */ function getKmsNode(address kmsTxSenderAddress) external view virtual returns (KmsNode memory) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.kmsNodes[kmsTxSenderAddress]; } - /// @dev See {IGatewayConfig-getKmsTxSenders}. + /** + * @notice See {IGatewayConfig-getKmsTxSenders}. + */ function getKmsTxSenders() external view virtual returns (address[] memory) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.kmsTxSenderAddresses; } - /// @dev See {IGatewayConfig-getKmsSigners}. + /** + * @notice See {IGatewayConfig-getKmsSigners}. + */ function getKmsSigners() external view virtual returns (address[] memory) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.kmsSignerAddresses; } - /// @dev See {IGatewayConfig-getCoprocessor}. + /** + * @notice See {IGatewayConfig-getCoprocessor}. + */ function getCoprocessor(address coprocessorTxSenderAddress) external view virtual returns (Coprocessor memory) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.coprocessors[coprocessorTxSenderAddress]; } - /// @dev See {IGatewayConfig-getCoprocessorTxSenders}. + /** + * @notice See {IGatewayConfig-getCoprocessorTxSenders}. + */ function getCoprocessorTxSenders() external view virtual returns (address[] memory) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.coprocessorTxSenderAddresses; } - /// @dev See {IGatewayConfig-getCoprocessorSigners}. + /** + * @notice See {IGatewayConfig-getCoprocessorSigners}. + */ function getCoprocessorSigners() external view virtual returns (address[] memory) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.coprocessorSignerAddresses; } - /// @dev See {IGatewayConfig-getHostChain}. + /** + * @notice See {IGatewayConfig-getHostChain}. + */ function getHostChain(uint256 index) external view virtual returns (HostChain memory) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.hostChains[index]; } - /// @dev See {IGatewayConfig-getHostChains}. + /** + * @notice See {IGatewayConfig-getHostChains}. + */ function getHostChains() external view virtual returns (HostChain[] memory) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.hostChains; } - /// @dev See {IGatewayConfig-getCustodian}. + /** + * @notice See {IGatewayConfig-getCustodian}. + */ function getCustodian(address custodianTxSenderAddress) external view virtual returns (Custodian memory) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.custodians[custodianTxSenderAddress]; } - /// @dev See {IGatewayConfig-getCustodianTxSenders}. + /** + * @notice See {IGatewayConfig-getCustodianTxSenders}. + */ function getCustodianTxSenders() external view virtual returns (address[] memory) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.custodianTxSenderAddresses; } - /// @dev See {IGatewayConfig-getCustodianSigners}. + /** + * @notice See {IGatewayConfig-getCustodianSigners}. + */ function getCustodianSigners() external view virtual returns (address[] memory) { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); return $.custodianSignerAddresses; } - /// @dev See {IGatewayConfig-getVersion}. + /** + * @notice See {IGatewayConfig-getVersion}. + */ function getVersion() external pure virtual returns (string memory) { return string( @@ -461,16 +522,16 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab } /** - * @dev Sets the MPC threshold. + * @notice Sets the MPC threshold. * @param newMpcThreshold The new MPC threshold. */ function _setMpcThreshold(uint256 newMpcThreshold) internal virtual { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); uint256 nKmsNodes = $.kmsSignerAddresses.length; - /// @dev Check that the MPC threshold `t` is valid. It must verify: - /// @dev - `t >= 0` : it is already a uint256 so this is always true - /// @dev - `t < n` : it should be strictly less than the number of registered KMS nodes + // Check that the MPC threshold `t` is valid. It must verify: + // - `t >= 0` : it is already a uint256 so this is always true + // - `t < n` : it should be strictly less than the number of registered KMS nodes if (newMpcThreshold >= nKmsNodes) { revert InvalidHighMpcThreshold(newMpcThreshold, nKmsNodes); } @@ -479,16 +540,16 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab } /** - * @dev Sets the public decryption threshold. + * @notice Sets the public decryption threshold. * @param newPublicDecryptionThreshold The new public decryption threshold. */ function _setPublicDecryptionThreshold(uint256 newPublicDecryptionThreshold) internal virtual { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); uint256 nKmsNodes = $.kmsSignerAddresses.length; - /// @dev Check that the public decryption threshold `t` is valid. It must verify: - /// @dev - `t >= 1` : the public decryption consensus should require at least one vote - /// @dev - `t <= n` : it should be less than the number of registered KMS nodes + // Check that the public decryption threshold `t` is valid. It must verify: + // - `t >= 1` : the public decryption consensus should require at least one vote + // - `t <= n` : it should be less than the number of registered KMS nodes if (newPublicDecryptionThreshold == 0) { revert InvalidNullPublicDecryptionThreshold(); } @@ -500,16 +561,16 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab } /** - * @dev Sets the user decryption threshold. + * @notice Sets the user decryption threshold. * @param newUserDecryptionThreshold The new user decryption threshold. */ function _setUserDecryptionThreshold(uint256 newUserDecryptionThreshold) internal virtual { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); uint256 nKmsNodes = $.kmsSignerAddresses.length; - /// @dev Check that the user decryption threshold `t` is valid. It must verify: - /// @dev - `t >= 1` : the user decryption consensus should require at least one vote - /// @dev - `t <= n` : it should be less than the number of registered KMS nodes + // Check that the user decryption threshold `t` is valid. It must verify: + // - `t >= 1` : the user decryption consensus should require at least one vote + // - `t <= n` : it should be less than the number of registered KMS nodes if (newUserDecryptionThreshold == 0) { revert InvalidNullUserDecryptionThreshold(); } @@ -521,16 +582,16 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab } /** - * @dev Sets the key and CRS generation threshold. + * @notice Sets the key and CRS generation threshold. * @param newKmsGenThreshold The new key and CRS generation threshold. */ function _setKmsGenThreshold(uint256 newKmsGenThreshold) internal virtual { GatewayConfigStorage storage $ = _getGatewayConfigStorage(); uint256 nKmsNodes = $.kmsSignerAddresses.length; - /// @dev Check that the key and CRS generation threshold `t` is valid. It must verify: - /// @dev - `t >= 1` : the key and CRS generation consensus should require at least one vote - /// @dev - `t <= n` : it should be less than the number of registered KMS nodes + // Check that the key and CRS generation threshold `t` is valid. It must verify: + // - `t >= 1` : the key and CRS generation consensus should require at least one vote + // - `t <= n` : it should be less than the number of registered KMS nodes if (newKmsGenThreshold == 0) { revert InvalidNullKmsGenThreshold(); } @@ -542,14 +603,14 @@ contract GatewayConfig is IGatewayConfig, Ownable2StepUpgradeable, UUPSUpgradeab } /** - * @dev Should revert when `msg.sender` is not authorized to upgrade the contract. + * @notice Checks if the sender is authorized to upgrade the contract and reverts otherwise. */ // solhint-disable-next-line no-empty-blocks function _authorizeUpgrade(address _newImplementation) internal virtual override onlyOwner {} /** - * @dev Returns the GatewayConfig storage location. - * Note that this function is internal but not virtual: derived contracts should be able to + * @notice Returns the GatewayConfig storage location. + * @dev Note that this function is internal but not virtual: derived contracts should be able to * access it, but if the underlying storage struct version changes, we force them to define a new * getter function and use that one instead in order to avoid overriding the storage location. */ diff --git a/gateway-contracts/contracts/InputVerification.sol b/gateway-contracts/contracts/InputVerification.sol index 1ba0d0515..8c78472f2 100644 --- a/gateway-contracts/contracts/InputVerification.sol +++ b/gateway-contracts/contracts/InputVerification.sol @@ -15,7 +15,7 @@ import { Coprocessor } from "./shared/Structs.sol"; /** * @title InputVerification smart contract - * @dev See {IInputVerification} + * @notice See {IInputVerification} */ contract InputVerification is IInputVerification, @@ -28,7 +28,7 @@ contract InputVerification is /** * @notice The typed data structure for the EIP712 signature to validate in ZK Proof verification responses. * @dev The name of this struct is not relevant for the signature validation, only the one defined - * @dev EIP712_ZKPOK_TYPE is, but we keep it the same for clarity. + * EIP712_ZKPOK_TYPE is, but we keep it the same for clarity. */ struct CiphertextVerification { /// @notice The coprocessor's computed ciphertext handles. @@ -43,7 +43,9 @@ contract InputVerification is bytes extraData; } - /// @notice The stored structure for the received ZK Proof verification request inputs. + /** + * @notice The stored structure for the received ZK Proof verification request inputs. + */ struct ZKProofInput { /// @notice The chain ID of the contract address. uint256 contractChainId; @@ -53,19 +55,27 @@ contract InputVerification is address userAddress; } - /// @notice The address of the GatewayConfig contract for protocol state calls. + /** + * @notice The address of the GatewayConfig contract for protocol state calls. + */ IGatewayConfig private constant GATEWAY_CONFIG = IGatewayConfig(gatewayConfigAddress); - /// @notice The definition of the CiphertextVerification structure typed data. + /** + * @notice The definition of the CiphertextVerification structure typed data. + */ string private constant EIP712_ZKPOK_TYPE = "CiphertextVerification(bytes32[] ctHandles,address userAddress,address contractAddress,uint256 contractChainId,bytes extraData)"; - /// @notice The hash of the CiphertextVerification structure typed data definition used for signature validation. + /** + * @notice The hash of the CiphertextVerification structure typed data definition used for signature validation. + */ bytes32 private constant EIP712_ZKPOK_TYPE_HASH = keccak256(bytes(EIP712_ZKPOK_TYPE)); - /// @dev The following constants are used for versioning the contract. They are made private - /// @dev in order to force derived contracts to consider a different version. Note that - /// @dev they can still define their own private constants with the same name. + /** + * @dev The following constants are used for versioning the contract. They are made private + * in order to force derived contracts to consider a different version. Note that + * they can still define their own private constants with the same name. + */ string private constant CONTRACT_NAME = "InputVerification"; uint256 private constant MAJOR_VERSION = 0; uint256 private constant MINOR_VERSION = 1; @@ -79,7 +89,9 @@ contract InputVerification is */ uint64 private constant REINITIALIZER_VERSION = 2; - /// @notice The contract's variable storage struct (@dev see ERC-7201) + /** + * @notice The contract's variable storage struct (@dev see ERC-7201) + */ /// @custom:storage-location erc7201:fhevm_gateway.storage.InputVerification struct InputVerificationStorage { // ---------------------------------------------------------------------------------------------- @@ -116,11 +128,18 @@ contract InputVerification is mapping(uint256 zkProofId => mapping(address coprocessorSigner => bool hasRejected)) signerRejectedZKPoK; /// @notice The coprocessor transaction senders involved in a consensus for a proof rejection. mapping(uint256 zkProofId => address[] coprocessorTxSenderAddresses) rejectProofConsensusTxSenders; + // ---------------------------------------------------------------------------------------------- + // Context state variables: + // ---------------------------------------------------------------------------------------------- + /// @notice The coprocessor context ID associated to the input verification request + mapping(uint256 zkProofId => uint256 contextId) inputVerificationContextId; } - /// @dev Storage location has been computed using the following command: - /// @dev keccak256(abi.encode(uint256(keccak256("fhevm_gateway.storage.InputVerification")) - 1)) - /// @dev & ~bytes32(uint256(0xff)) + /** + * @dev Storage location has been computed using the following command: + * keccak256(abi.encode(uint256(keccak256("fhevm_gateway.storage.InputVerification")) - 1)) + * & ~bytes32(uint256(0xff)) + */ bytes32 private constant INPUT_VERIFICATION_STORAGE_LOCATION = 0x4544165ce1653264fdcb09b029891e3d4c8d8583486821172f882e19a149a800; @@ -129,9 +148,11 @@ contract InputVerification is _disableInitializers(); } - /// @notice Initializes the contract. - /// @dev Contract name and version for EIP712 signature validation are defined here - /// @dev This function needs to be public in order to be called by the UUPS proxy. + /** + * @notice Initializes the contract. + * @dev Contract name and version for EIP712 signature validation are defined here + * @dev This function needs to be public in order to be called by the UUPS proxy. + */ /// @custom:oz-upgrades-validate-as-initializer function initializeFromEmptyProxy() public virtual onlyFromEmptyProxy reinitializer(REINITIALIZER_VERSION) { __EIP712_init(CONTRACT_NAME, "1"); @@ -148,7 +169,9 @@ contract InputVerification is /// @custom:oz-upgrades-validate-as-initializer // function reinitializeV2() public virtual reinitializer(REINITIALIZER_VERSION) {} - /// @dev See {IInputVerification-verifyProofRequest}. + /** + * @notice See {IInputVerification-verifyProofRequest}. + */ function verifyProofRequest( uint256 contractChainId, address contractAddress, @@ -161,9 +184,12 @@ contract InputVerification is $.zkProofIdCounter++; uint256 zkProofId = $.zkProofIdCounter; - /// @dev The following stored inputs are used during response calls for the EIP712 signature validation. + // The following stored inputs are used during response calls for the EIP712 signature validation. $.zkProofInputs[zkProofId] = ZKProofInput(contractChainId, contractAddress, userAddress); + // Associate the request to coprocessor context ID 1 to anticipate their introduction in V2. + $.inputVerificationContextId[zkProofId] = 1; + emit VerifyProofRequest( zkProofId, contractChainId, @@ -192,10 +218,10 @@ contract InputVerification is revert VerifyProofNotRequested(zkProofId); } - /// @dev Retrieve stored ZK Proof verification request inputs. + // Retrieve stored ZK Proof verification request inputs. ZKProofInput memory zkProofInput = $.zkProofInputs[zkProofId]; - /// @dev Initialize the CiphertextVerification structure for the signature validation. + // Initialize the CiphertextVerification structure for the signature validation. CiphertextVerification memory ciphertextVerification = CiphertextVerification( ctHandles, zkProofInput.userAddress, @@ -204,16 +230,16 @@ contract InputVerification is extraData ); - /// @dev Compute the digest of the CiphertextVerification structure. + // Compute the digest of the CiphertextVerification structure. bytes32 digest = _hashCiphertextVerification(ciphertextVerification); - /// @dev Recover the signer address from the signature, + // Recover the signer address from the signature, address signerAddress = ECDSA.recover(digest, signature); // Check that the signer is a coprocessor signer. _checkIsCoprocessorSigner(signerAddress); - /// @dev Check that the coprocessor has not already responded to the ZKPoK verification request. + // Check that the coprocessor has not already responded to the ZKPoK verification request. _checkCoprocessorAlreadyResponded(zkProofId, msg.sender, signerAddress); bytes[] storage currentSignatures = $.zkProofSignatures[zkProofId][digest]; @@ -240,7 +266,9 @@ contract InputVerification is } } - /// @dev See {IInputVerification-rejectProofResponse}. + /** + * @notice See {IInputVerification-rejectProofResponse}. + */ function rejectProofResponse( uint256 zkProofId, bytes calldata /* extraData */ @@ -262,7 +290,7 @@ contract InputVerification is Coprocessor memory coprocessor = GATEWAY_CONFIG.getCoprocessor(msg.sender); address coprocessorSignerAddress = coprocessor.signerAddress; - /// @dev Check that the coprocessor has not already responded to the ZKPoK verification request. + // Check that the coprocessor has not already responded to the ZKPoK verification request. _checkCoprocessorAlreadyResponded(zkProofId, msg.sender, coprocessorSignerAddress); $.rejectedProofResponseCounter[zkProofId]++; @@ -283,7 +311,7 @@ contract InputVerification is } /** - * @dev See {IInputVerification-isProofVerified}. + * @notice See {IInputVerification-isProofVerified}. */ function isProofVerified(uint256 zkProofId) external view virtual returns (bool) { InputVerificationStorage storage $ = _getInputVerificationStorage(); @@ -291,7 +319,7 @@ contract InputVerification is } /** - * @dev See {IInputVerification-isProofRejected}. + * @notice See {IInputVerification-isProofRejected}. */ function isProofRejected(uint256 zkProofId) external view virtual returns (bool) { InputVerificationStorage storage $ = _getInputVerificationStorage(); @@ -299,7 +327,7 @@ contract InputVerification is } /** - * @dev See {IInputVerification-getVerifyProofConsensusTxSenders}. + * @notice See {IInputVerification-getVerifyProofConsensusTxSenders}. * The list remains empty until the consensus is reached. */ function getVerifyProofConsensusTxSenders(uint256 zkProofId) external view virtual returns (address[] memory) { @@ -314,14 +342,18 @@ contract InputVerification is return $.verifyProofConsensusTxSenders[zkProofId][consensusDigest]; } - /// @dev See {IDecryption-getRejectProofConsensusTxSenders}. + /** + * @notice See {IInputVerification-getRejectProofConsensusTxSenders}. + */ function getRejectProofConsensusTxSenders(uint256 zkProofId) external view virtual returns (address[] memory) { InputVerificationStorage storage $ = _getInputVerificationStorage(); return $.rejectProofConsensusTxSenders[zkProofId]; } - /// @dev See {IInputVerification-getVersion}. + /** + * @notice See {IInputVerification-getVersion}. + */ function getVersion() external pure virtual returns (string memory) { return string( @@ -338,7 +370,7 @@ contract InputVerification is } /** - * @dev Should revert when `msg.sender` is not authorized to upgrade the contract. + * @notice Checks if the sender is authorized to upgrade the contract and reverts otherwise. */ // solhint-disable-next-line no-empty-blocks function _authorizeUpgrade(address _newImplementation) internal virtual override onlyGatewayOwner {} @@ -399,8 +431,8 @@ contract InputVerification is } /** - * @dev Returns the InputVerification storage location. - * Note that this function is internal but not virtual: derived contracts should be able to + * @notice Returns the InputVerification storage location. + * @dev Note that this function is internal but not virtual: derived contracts should be able to * access it, but if the underlying storage struct version changes, we force them to define a new * getter function and use that one instead in order to avoid overriding the storage location. */ diff --git a/gateway-contracts/contracts/KMSGeneration.sol b/gateway-contracts/contracts/KMSGeneration.sol index db74d182a..d59f47a75 100644 --- a/gateway-contracts/contracts/KMSGeneration.sol +++ b/gateway-contracts/contracts/KMSGeneration.sol @@ -14,7 +14,7 @@ import { PREP_KEYGEN_COUNTER_BASE, KEY_COUNTER_BASE, CRS_COUNTER_BASE } from "./ /** * @title KMSGeneration contract - * @dev See {IKMSGeneration}. + * @notice See {IKMSGeneration}. */ contract KMSGeneration is IKMSGeneration, @@ -40,22 +40,24 @@ contract KMSGeneration is /** * @notice The EIP-712 type definition for the KeyDigest struct. - * @dev keyType: The type of the generated key. - * @dev digest: The digest of the generated key. - * @dev Required because EIP-712 mandates that each nested struct type - * used in a primary type (e.g. KeygenVerification) must be explicitly - * declared with its own type string and type hash. - * These constants are used when computing the struct hash of each - * KeyDigest element inside the keyDigests[] array. + * @dev The following fields are used for the KeyDigest struct: + * - keyType: The type of the generated key. + * - digest: The digest of the generated key. + * Required because EIP-712 mandates that each nested struct type + * used in a primary type (e.g. KeygenVerification) must be explicitly + * declared with its own type string and type hash. + * These constants are used when computing the struct hash of each + * KeyDigest element inside the keyDigests[] array. */ string private constant EIP712_KEY_DIGEST_TYPE = "KeyDigest(uint8 keyType,bytes digest)"; bytes32 private constant EIP712_KEY_DIGEST_TYPE_HASH = keccak256(bytes(EIP712_KEY_DIGEST_TYPE)); /** * @notice The KeygenVerification typed definition. - * @dev prepKeygenId: The ID of the preprocessing keygen request. - * @dev keyId: The ID of the generated key. - * @dev keyDigests: The digests of the generated key. + * @dev The following fields are used for the KeygenVerification struct: + * - prepKeygenId: The ID of the preprocessing keygen request. + * - keyId: The ID of the generated key. + * - keyDigests: The digests of the generated key. */ string private constant EIP712_KEYGEN_TYPE = "KeygenVerification(uint256 prepKeygenId,uint256 keyId,KeyDigest[] keyDigests)KeyDigest(uint8 keyType,bytes digest)"; @@ -67,9 +69,10 @@ contract KMSGeneration is /** * @notice The CrsgenVerification typed definition. - * @dev crsId: The ID of the generated CRS. - * @dev maxBitLength: The max bit length of the generated CRS. - * @dev crsDigest: The digest of the generated CRS. + * @dev The following fields are used for the CrsgenVerification struct: + * - crsId: The ID of the generated CRS. + * - maxBitLength: The max bit length of the generated CRS. + * - crsDigest: The digest of the generated CRS. */ string private constant EIP712_CRSGEN_TYPE = "CrsgenVerification(uint256 crsId,uint256 maxBitLength,bytes crsDigest)"; @@ -126,8 +129,6 @@ contract KMSGeneration is mapping(uint256 requestId => bool hasConsensusAlreadyBeenReached) isRequestDone; /// @notice The KMS transaction sender addresses that propagated valid signatures for a request mapping(uint256 requestId => mapping(bytes32 digest => address[] kmsTxSenderAddresses)) consensusTxSenderAddresses; - /// @notice The KMS nodes' storage URL that propagated valid signatures for a request - mapping(uint256 requestId => mapping(bytes32 digest => string[] kmsNodeStorageUrls)) consensusStorageUrls; /// @notice The digest of the signed struct on which consensus was reached for a request mapping(uint256 requestId => bytes32 digest) consensusDigest; // ---------------------------------------------------------------------------------------------- @@ -194,7 +195,7 @@ contract KMSGeneration is } /** - * @dev See {IKMSGeneration-keygen}. + * @notice See {IKMSGeneration-keygen}. */ function keygen(ParamsType paramsType) external virtual onlyGatewayOwner { KMSGenerationStorage storage $ = _getKMSGenerationStorage(); @@ -232,7 +233,7 @@ contract KMSGeneration is } /** - * @dev See {IKMSGeneration-prepKeygenResponse}. + * @notice See {IKMSGeneration-prepKeygenResponse}. */ function prepKeygenResponse(uint256 prepKeygenId, bytes calldata signature) external virtual onlyKmsTxSender { KMSGenerationStorage storage $ = _getKMSGenerationStorage(); @@ -272,7 +273,7 @@ contract KMSGeneration is } /** - * @dev See {IKMSGeneration-keygenResponse}. + * @notice See {IKMSGeneration-keygenResponse}. */ function keygenResponse( uint256 keyId, @@ -297,13 +298,16 @@ contract KMSGeneration is $.kmsHasSignedForResponse[keyId][kmsSigner] = true; - // Store the KMS transaction sender address and the storage URL for the keygen response, - // event if the consensus has already been reached - string[] memory consensusUrls = _storeConsensusMaterials(keyId, digest); + // Store the KMS transaction sender address for the keygen response + // A "late" valid KMS transaction sender address or storage URL will still be added in the list + address[] storage consensusTxSenders = $.consensusTxSenderAddresses[keyId][digest]; + consensusTxSenders.push(msg.sender); + + uint256 consensusTxSendersLength = consensusTxSenders.length; // Send the event if and only if the consensus is reached in the current response call. // This means a "late" response will not be reverted, just ignored and no event will be emitted - if (!$.isRequestDone[keyId] && _isKmsConsensusReached(consensusUrls.length)) { + if (!$.isRequestDone[keyId] && _isKmsConsensusReached(consensusTxSendersLength)) { $.isRequestDone[keyId] = true; // Store the digests of the generated keys in order to retrieve them later @@ -320,13 +324,17 @@ contract KMSGeneration is // Set the active keyId $.activeKeyId = keyId; + string[] memory consensusUrls = new string[](consensusTxSendersLength); + for (uint256 i = 0; i < consensusTxSendersLength; i++) { + consensusUrls[i] = GATEWAY_CONFIG.getKmsNode(consensusTxSenders[i]).storageUrl; + } emit ActivateKey(keyId, consensusUrls, keyDigests); } } /** - * @dev See {IKMSGeneration-crsgenRequest}. + * @notice See {IKMSGeneration-crsgenRequest}. */ function crsgenRequest(uint256 maxBitLength, ParamsType paramsType) external virtual onlyGatewayOwner { KMSGenerationStorage storage $ = _getKMSGenerationStorage(); @@ -349,7 +357,7 @@ contract KMSGeneration is } /** - * @dev See {IKMSGeneration-crsgenResponse}. + * @notice See {IKMSGeneration-crsgenResponse}. */ function crsgenResponse( uint256 crsId, @@ -373,13 +381,16 @@ contract KMSGeneration is $.kmsHasSignedForResponse[crsId][kmsSigner] = true; - // Store the KMS transaction sender address and the storage URL for the crsgen response, - // event if the consensus has already been reached - string[] memory consensusUrls = _storeConsensusMaterials(crsId, digest); + // Store the KMS transaction sender address for the crsgen response + // A "late" valid KMS transaction sender address or storage URL will still be added in the list + address[] storage consensusTxSenders = $.consensusTxSenderAddresses[crsId][digest]; + consensusTxSenders.push(msg.sender); + + uint256 consensusTxSendersLength = consensusTxSenders.length; // Send the event if and only if the consensus is reached in the current response call. // This means a "late" response will not be reverted, just ignored and no event will be emitted - if (!$.isRequestDone[crsId] && _isKmsConsensusReached(consensusUrls.length)) { + if (!$.isRequestDone[crsId] && _isKmsConsensusReached(consensusTxSendersLength)) { $.isRequestDone[crsId] = true; // Store the digest of the generated CRS in order to retrieve it later @@ -391,12 +402,16 @@ contract KMSGeneration is // Set the active CRS ID $.activeCrsId = crsId; + string[] memory consensusUrls = new string[](consensusTxSendersLength); + for (uint256 i = 0; i < consensusTxSendersLength; i++) { + consensusUrls[i] = GATEWAY_CONFIG.getKmsNode(consensusTxSenders[i]).storageUrl; + } emit ActivateCrs(crsId, consensusUrls, crsDigest); } } /** - * @dev See {IKMSGeneration-getKeyParamsType}. + * @notice See {IKMSGeneration-getKeyParamsType}. */ function getKeyParamsType(uint256 keyId) external view virtual returns (ParamsType) { KMSGenerationStorage storage $ = _getKMSGenerationStorage(); @@ -412,7 +427,7 @@ contract KMSGeneration is } /** - * @dev See {IKMSGeneration-getCrsParamsType}. + * @notice See {IKMSGeneration-getCrsParamsType}. */ function getCrsParamsType(uint256 crsId) external view virtual returns (ParamsType) { KMSGenerationStorage storage $ = _getKMSGenerationStorage(); @@ -425,7 +440,7 @@ contract KMSGeneration is } /** - * @dev See {IKMSGeneration-getActiveKeyId}. + * @notice See {IKMSGeneration-getActiveKeyId}. */ function getActiveKeyId() external view virtual returns (uint256) { KMSGenerationStorage storage $ = _getKMSGenerationStorage(); @@ -433,7 +448,7 @@ contract KMSGeneration is } /** - * @dev See {IKMSGeneration-getActiveCrsId}. + * @notice See {IKMSGeneration-getActiveCrsId}. */ function getActiveCrsId() external view virtual returns (uint256) { KMSGenerationStorage storage $ = _getKMSGenerationStorage(); @@ -441,7 +456,7 @@ contract KMSGeneration is } /** - * @dev See {IKMSGeneration-getConsensusTxSenders}. + * @notice See {IKMSGeneration-getConsensusTxSenders}. * The returned list remains empty until the consensus is reached. */ function getConsensusTxSenders(uint256 requestId) external view virtual returns (address[] memory) { @@ -458,39 +473,47 @@ contract KMSGeneration is } /** - * @dev See {IKMSGeneration-getKeyMaterials}. + * @notice See {IKMSGeneration-getKeyMaterials}. */ function getKeyMaterials(uint256 keyId) external view virtual returns (string[] memory, KeyDigest[] memory) { KMSGenerationStorage storage $ = _getKMSGenerationStorage(); - if (!$.isRequestDone[keyId]) { revert KeyNotGenerated(keyId); } - - // Get the unique digest associated to the keygen request bytes32 digest = $.consensusDigest[keyId]; + address[] memory consensusTxSenders = $.consensusTxSenderAddresses[keyId][digest]; + uint256 consensusTxSendersLength = consensusTxSenders.length; - return ($.consensusStorageUrls[keyId][digest], $.keyDigests[keyId]); + string[] memory consensusUrls = new string[](consensusTxSendersLength); + for (uint256 i = 0; i < consensusTxSendersLength; i++) { + consensusUrls[i] = GATEWAY_CONFIG.getKmsNode(consensusTxSenders[i]).storageUrl; + } + + return (consensusUrls, $.keyDigests[keyId]); } /** - * @dev See {IKMSGeneration-getCrsMaterials}. + * @notice See {IKMSGeneration-getCrsMaterials}. */ function getCrsMaterials(uint256 crsId) external view virtual returns (string[] memory, bytes memory) { KMSGenerationStorage storage $ = _getKMSGenerationStorage(); - if (!$.isRequestDone[crsId]) { revert CrsNotGenerated(crsId); } - - // Get the unique digest associated to the crsgen request bytes32 digest = $.consensusDigest[crsId]; + address[] memory consensusTxSenders = $.consensusTxSenderAddresses[crsId][digest]; + uint256 consensusTxSendersLength = consensusTxSenders.length; - return ($.consensusStorageUrls[crsId][digest], $.crsDigests[crsId]); + string[] memory consensusUrls = new string[](consensusTxSendersLength); + for (uint256 i = 0; i < consensusTxSendersLength; i++) { + consensusUrls[i] = GATEWAY_CONFIG.getKmsNode(consensusTxSenders[i]).storageUrl; + } + + return (consensusUrls, $.crsDigests[crsId]); } /** - * @dev See {IKMSGeneration-getVersion}. + * @notice See {IKMSGeneration-getVersion}. */ function getVersion() external pure virtual returns (string memory) { return @@ -524,31 +547,7 @@ contract KMSGeneration is } /** - * @notice Stores the KMS transaction sender address and the storage URL for the keygen response - * @param requestId The ID of the request. - * @param digest The digest of the request. - * @return The list of storage URLs. - */ - function _storeConsensusMaterials(uint256 requestId, bytes32 digest) internal virtual returns (string[] memory) { - KMSGenerationStorage storage $ = _getKMSGenerationStorage(); - - // Get the KMS node's storage URL - string memory kmsNodeStorageUrl = GATEWAY_CONFIG.getKmsNode(msg.sender).storageUrl; - - // Store the KMS transaction sender address and the storage URL for the keygen response - // It is important to consider the same mapping fields used for the consensus - // A "late" valid KMS transaction sender address or storage URL will still be added in the list - address[] storage consensusTxSenders = $.consensusTxSenderAddresses[requestId][digest]; - consensusTxSenders.push(msg.sender); - - string[] storage consensusUrls = $.consensusStorageUrls[requestId][digest]; - consensusUrls.push(kmsNodeStorageUrl); - - return consensusUrls; - } - - /** - * @dev Should revert when `msg.sender` is not authorized to upgrade the contract. + * @notice Checks if the sender is authorized to upgrade the contract and reverts otherwise. */ // solhint-disable-next-line no-empty-blocks function _authorizeUpgrade(address _newImplementation) internal virtual override onlyGatewayOwner {} @@ -584,11 +583,9 @@ contract KMSGeneration is uint256 keyId, KeyDigest[] calldata keyDigests ) internal view virtual returns (bytes32) { - /** - * Encodes each KeyDigest struct and computes its struct hash. - * The `keyDigests` array must be ordered consistently with the KMS nodes: - * the first element corresponds to the Server type, and the second to the Public type. - */ + // Encodes each KeyDigest struct and computes its struct hash. + // The `keyDigests` array must be ordered consistently with the KMS nodes: + // the first element corresponds to the Server type, and the second to the Public type. bytes32[] memory keyDigestHashes = new bytes32[](keyDigests.length); for (uint256 i = 0; i < keyDigests.length; i++) { keyDigestHashes[i] = keccak256( @@ -630,8 +627,8 @@ contract KMSGeneration is } /** - * @dev Returns the KMSGeneration storage location. - * Note that this function is internal but not virtual: derived contracts should be able to + * @notice Returns the KMSGeneration storage location. + * @dev Note that this function is internal but not virtual: derived contracts should be able to * access it, but if the underlying storage struct version changes, we force them to define a new * getter function and use that one instead in order to avoid overriding the storage location. */ diff --git a/gateway-contracts/contracts/MultichainACL.sol b/gateway-contracts/contracts/MultichainACL.sol index 074b0b467..17a11aaac 100644 --- a/gateway-contracts/contracts/MultichainACL.sol +++ b/gateway-contracts/contracts/MultichainACL.sol @@ -9,20 +9,22 @@ import { IGatewayConfig } from "./interfaces/IGatewayConfig.sol"; import { UUPSUpgradeableEmptyProxy } from "./shared/UUPSUpgradeableEmptyProxy.sol"; import { GatewayConfigChecks } from "./shared/GatewayConfigChecks.sol"; import { GatewayOwnable } from "./shared/GatewayOwnable.sol"; -import { DelegationAccounts } from "./shared/Structs.sol"; -/// @title MultichainACL smart contract -/// @dev See {IMultichainACL} +/** + * @title MultichainACL smart contract + * @notice See {IMultichainACL} + */ contract MultichainACL is IMultichainACL, UUPSUpgradeableEmptyProxy, GatewayOwnable, GatewayConfigChecks { - /// @notice The address of the GatewayConfig contract for protocol state calls. + /** + * @notice The address of the GatewayConfig contract for protocol state calls. + */ IGatewayConfig private constant GATEWAY_CONFIG = IGatewayConfig(gatewayConfigAddress); - /// @notice The maximum number of contracts that can be requested for delegation. - uint8 internal constant MAX_CONTRACT_ADDRESSES = 10; - - /// @dev The following constants are used for versioning the contract. They are made private - /// @dev in order to force derived contracts to consider a different version. Note that - /// @dev they can still define their own private constants with the same name. + /** + * @dev The following constants are used for versioning the contract. They are made private + * in order to force derived contracts to consider a different version. Note that + * they can still define their own private constants with the same name. + */ string private constant CONTRACT_NAME = "MultichainACL"; uint256 private constant MAJOR_VERSION = 0; uint256 private constant MINOR_VERSION = 1; @@ -36,66 +38,36 @@ contract MultichainACL is IMultichainACL, UUPSUpgradeableEmptyProxy, GatewayOwna */ uint64 private constant REINITIALIZER_VERSION = 2; - /// @notice The contract's variable storage struct (@dev see ERC-7201) + /** + * @notice The contract's variable storage struct (@dev see ERC-7201) + */ /// @custom:storage-location erc7201:fhevm_gateway.storage.MultichainACL struct MultichainACLStorage { // ---------------------------------------------------------------------------------------------- - // Common consensus state variables: + // Common state variables: // ---------------------------------------------------------------------------------------------- - /// @notice The coprocessor transaction senders involved in a consensus for allowing a public decryption. - mapping(bytes32 ctHandle => address[] coprocessorTxSenderAddresses) allowPublicDecryptConsensusTxSenders; - // prettier-ignore - /// @notice The coprocessor transaction senders involved in a consensus for allowing an account. - mapping(bytes32 ctHandle => mapping(address accountAddress => - address[] coprocessorTxSenderAddresses)) - allowAccountConsensusTxSenders; + /// @notice The coprocessors that have already made an allow call. + mapping(bytes32 allowHash => mapping(address coprocessorTxSenderAddress => bool hasAllowed)) allowCoprocessors; + /// @notice The counter used for an allow consensus. + mapping(bytes32 allowHash => uint256 counter) allowCounters; + /// @notice The coprocessor transaction senders involved in a consensus for an allow call. + mapping(bytes32 allowHash => address[] coprocessorTxSenderAddresses) allowConsensusTxSenders; + /// @notice Allowed public decryptions. + mapping(bytes32 allowHash => bool isAllowed) isAllowed; /// @notice The coprocessor transaction senders involved in a consensus for delegating an account. mapping(bytes32 delegateAccountHash => address[] coprocessorTxSenderAddresses) delegateAccountConsensusTxSenders; // ---------------------------------------------------------------------------------------------- - // Allow account state variables: + // Coprocessor context state variables: // ---------------------------------------------------------------------------------------------- - /// @notice Accounts allowed to use the ciphertext handle. - mapping(bytes32 ctHandle => mapping(address accountAddress => bool isAllowed)) allowedAccounts; - /// @notice The counter used for the allowAccount consensus. - mapping(bytes32 ctHandle => mapping(address accountAddress => uint256 counter)) allowAccountCounters; - // prettier-ignore - /// @notice The coprocessors that have already allowed an account to use the ciphertext handle. - mapping(bytes32 ctHandle => mapping(address accountAddress => - mapping(address coprocessorTxSenderAddress => bool hasAllowed))) - allowAccountCoprocessors; - // ---------------------------------------------------------------------------------------------- - // Allow public decryption state variables: - // ---------------------------------------------------------------------------------------------- - /// @notice Allowed public decryptions. - mapping(bytes32 ctHandle => bool isAllowed) allowedPublicDecrypts; - /// @notice The counter used for the public decryption consensus. - mapping(bytes32 ctHandle => uint256 counter) allowPublicDecryptCounters; - // prettier-ignore - /// @notice The coprocessors that have already allowed a public decryption. - mapping(bytes32 ctHandle => mapping(address coprocessorTxSenderAddress => bool hasAllowed)) - allowPublicDecryptCoprocessors; - // ---------------------------------------------------------------------------------------------- - // Delegate account state variables: - // ---------------------------------------------------------------------------------------------- - /// @notice The computed delegateAccountHash that has already been delegated. - mapping(bytes32 delegateAccountHash => bool isDelegated) delegatedAccountHashes; - /// @notice The number of times a delegateAccountHash has received confirmations. - mapping(bytes32 delegateAccountHash => uint256 counter) delegateAccountHashCounters; - // prettier-ignore - /// @notice The coprocessors that have already delegated an account for a given delegateAccountHash. - mapping(bytes32 delegateAccountHash => - mapping(address coprocessorTxSenderAddress => bool hasDelegated)) - alreadyDelegatedCoprocessors; - // prettier-ignore - /// @notice The account delegations for a given contract after reaching consensus. - mapping(address delegator => mapping(address delegated => - mapping(uint256 chainId => mapping(address contractAddress => bool isDelegated)))) - delegatedContracts; + /// @notice The context ID for the allow consensus. + mapping(bytes32 allowHash => uint256 contextId) allowContextId; } - /// @dev Storage location has been computed using the following command: - /// @dev keccak256(abi.encode(uint256(keccak256("fhevm_gateway.storage.MultichainACL")) - 1)) - /// @dev & ~bytes32(uint256(0xff)) + /** + * @dev Storage location has been computed using the following command: + * keccak256(abi.encode(uint256(keccak256("fhevm_gateway.storage.MultichainACL")) - 1)) + * & ~bytes32(uint256(0xff)) + */ bytes32 private constant MULTICHAIN_ACL_STORAGE_LOCATION = 0x7f733a54a70114addd729bcd827932a6c402ccf3920960665917bc2e6640f400; @@ -104,8 +76,10 @@ contract MultichainACL is IMultichainACL, UUPSUpgradeableEmptyProxy, GatewayOwna _disableInitializers(); } - /// @notice Initializes the contract. - /// @dev This function needs to be public in order to be called by the UUPS proxy. + /** + * @notice Initializes the contract. + * @dev This function needs to be public in order to be called by the UUPS proxy. + */ /// @custom:oz-upgrades-validate-as-initializer function initializeFromEmptyProxy() public virtual onlyFromEmptyProxy reinitializer(REINITIALIZER_VERSION) {} @@ -117,38 +91,46 @@ contract MultichainACL is IMultichainACL, UUPSUpgradeableEmptyProxy, GatewayOwna /// @custom:oz-upgrades-validate-as-initializer // function reinitializeV2() public virtual reinitializer(REINITIALIZER_VERSION) {} - /// @dev See {IMultichainACL-allowPublicDecrypt}. + /** + * @notice See {IMultichainACL-allowPublicDecrypt}. + */ function allowPublicDecrypt( bytes32 ctHandle, bytes calldata /* extraData */ ) external virtual onlyCoprocessorTxSender onlyHandleFromRegisteredHostChain(ctHandle) { MultichainACLStorage storage $ = _getMultichainACLStorage(); - /** - * @dev Check if the coprocessor has already allowed the ciphertext handle for public decryption. - * A Coprocessor can only allow once for a given ctHandle, so it's not possible for it to allow - * the same ctHandle for different host chains, hence the chain ID is not included in the mapping. - */ - if ($.allowPublicDecryptCoprocessors[ctHandle][msg.sender]) { + // Associate the ctHandle to coprocessor context ID 1 to anticipate their introduction in V2. + // Only set the context ID if it hasn't been set yet to avoid multiple identical SSTOREs. + if ($.allowContextId[ctHandle] == 0) { + $.allowContextId[ctHandle] = 1; + } + + // Check if the coprocessor has already allowed the ciphertext handle for public decryption. + // A Coprocessor can only allow once for a given ctHandle, so it's not possible for it to allow + // the same ctHandle for different host chains, hence the chain ID is not included in the mapping. + if ($.allowCoprocessors[ctHandle][msg.sender]) { revert CoprocessorAlreadyAllowedPublicDecrypt(ctHandle, msg.sender); } - $.allowPublicDecryptCounters[ctHandle]++; - $.allowPublicDecryptCoprocessors[ctHandle][msg.sender] = true; + $.allowCounters[ctHandle]++; + $.allowCoprocessors[ctHandle][msg.sender] = true; // Store the coprocessor transaction sender address for the public decryption response // It is important to consider the same mapping fields used for the consensus // A "late" valid coprocessor transaction sender address will still be added in the list. - $.allowPublicDecryptConsensusTxSenders[ctHandle].push(msg.sender); + $.allowConsensusTxSenders[ctHandle].push(msg.sender); // Send the event if and only if the consensus is reached in the current response call. // This means a "late" response will not be reverted, just ignored and no event will be emitted - if (!$.allowedPublicDecrypts[ctHandle] && _isConsensusReached($.allowPublicDecryptCounters[ctHandle])) { - $.allowedPublicDecrypts[ctHandle] = true; + if (!$.isAllowed[ctHandle] && _isConsensusReached($.allowCounters[ctHandle])) { + $.isAllowed[ctHandle] = true; emit AllowPublicDecrypt(ctHandle); } } - /// @dev See {IMultichainACL-allowAccount}. + /** + * @notice See {IMultichainACL-allowAccount}. + */ function allowAccount( bytes32 ctHandle, address accountAddress, @@ -156,168 +138,83 @@ contract MultichainACL is IMultichainACL, UUPSUpgradeableEmptyProxy, GatewayOwna ) external virtual onlyCoprocessorTxSender onlyHandleFromRegisteredHostChain(ctHandle) { MultichainACLStorage storage $ = _getMultichainACLStorage(); - /** - * @dev Check if the coprocessor has already allowed the account to use the ciphertext handle. - * A Coprocessor can only allow once for a given ctHandle, so it's not possible for it to allow - * the same ctHandle for different host chains, hence the chain ID is not included in the mapping. - */ - if ($.allowAccountCoprocessors[ctHandle][accountAddress][msg.sender]) { - revert CoprocessorAlreadyAllowedAccount(ctHandle, accountAddress, msg.sender); - } - $.allowAccountCounters[ctHandle][accountAddress]++; - $.allowAccountCoprocessors[ctHandle][accountAddress][msg.sender] = true; - - // Store the coprocessor transaction sender address for the allow account response - // It is important to consider the same mapping fields used for the consensus - // A "late" valid coprocessor transaction sender address will still be added in the list. - $.allowAccountConsensusTxSenders[ctHandle][accountAddress].push(msg.sender); - - // Send the event if and only if the consensus is reached in the current response call. - // This means a "late" response will not be reverted, just ignored and no event will be emitted - if ( - !$.allowedAccounts[ctHandle][accountAddress] && - _isConsensusReached($.allowAccountCounters[ctHandle][accountAddress]) - ) { - $.allowedAccounts[ctHandle][accountAddress] = true; - emit AllowAccount(ctHandle, accountAddress); - } - } + // Compute the hash of the allow call, unique across all types of allow calls. + bytes32 allowHash = _getAllowAccountHash(ctHandle, accountAddress); - /// @dev See {IMultichainACL-delegateAccount}. - function delegateAccount( - uint256 chainId, - DelegationAccounts calldata delegationAccounts, - address[] calldata contractAddresses - ) external virtual onlyCoprocessorTxSender { - if (contractAddresses.length == 0) { - revert EmptyContractAddresses(); - } - if (contractAddresses.length > MAX_CONTRACT_ADDRESSES) { - revert ContractsMaxLengthExceeded(MAX_CONTRACT_ADDRESSES, contractAddresses.length); + // Associate the allowHash to coprocessor context ID 1 to anticipate their introduction in V2. + // Only set the context ID if it hasn't been set yet to avoid multiple identical SSTOREs. + if ($.allowContextId[allowHash] == 0) { + $.allowContextId[allowHash] = 1; } - MultichainACLStorage storage $ = _getMultichainACLStorage(); - - /// @dev The delegateAccountHash is the hash of all input arguments. - /// @dev This hash is used to track the delegation consensus over the whole contractAddresses list, - /// @dev and assumes that the Coprocessors will delegate the same list of contracts and keep the same order. - bytes32 delegateAccountHash = _getDelegateAccountHash(chainId, delegationAccounts, contractAddresses); - - mapping(address => bool) storage alreadyDelegatedCoprocessors = $.alreadyDelegatedCoprocessors[ - delegateAccountHash - ]; - - /// @dev Check if the coprocessor has already delegated the account. - if (alreadyDelegatedCoprocessors[msg.sender]) { - revert CoprocessorAlreadyDelegated(chainId, delegationAccounts, contractAddresses, msg.sender); + // Check if the coprocessor has already allowed the account to use the ciphertext handle. + // A Coprocessor can only allow once for a given ctHandle, so it's not possible for it to allow + // the same ctHandle for different host chains, hence the chain ID is not included in the mapping. + if ($.allowCoprocessors[allowHash][msg.sender]) { + revert CoprocessorAlreadyAllowedAccount(ctHandle, accountAddress, msg.sender); } + $.allowCounters[allowHash]++; + $.allowCoprocessors[allowHash][msg.sender] = true; - $.delegateAccountHashCounters[delegateAccountHash]++; - alreadyDelegatedCoprocessors[msg.sender] = true; - - // Store the coprocessor transaction sender address for the delegate account response + // Store the coprocessor transaction sender address for the allow account response // It is important to consider the same mapping fields used for the consensus // A "late" valid coprocessor transaction sender address will still be added in the list. - $.delegateAccountConsensusTxSenders[delegateAccountHash].push(msg.sender); + $.allowConsensusTxSenders[allowHash].push(msg.sender); // Send the event if and only if the consensus is reached in the current response call. // This means a "late" response will not be reverted, just ignored and no event will be emitted - if ( - !$.delegatedAccountHashes[delegateAccountHash] && - _isConsensusReached($.delegateAccountHashCounters[delegateAccountHash]) - ) { - mapping(address => bool) storage delegatedContracts = $.delegatedContracts[ - delegationAccounts.delegatorAddress - ][delegationAccounts.delegatedAddress][chainId]; - for (uint256 i = 0; i < contractAddresses.length; i++) { - delegatedContracts[contractAddresses[i]] = true; - } - $.delegatedAccountHashes[delegateAccountHash] = true; - emit DelegateAccount(chainId, delegationAccounts, contractAddresses); + if (!$.isAllowed[allowHash] && _isConsensusReached($.allowCounters[allowHash])) { + $.isAllowed[allowHash] = true; + emit AllowAccount(ctHandle, accountAddress); } } /** - * @dev See {IMultichainACL-isPublicDecryptAllowed}. + * @notice See {IMultichainACL-isPublicDecryptAllowed}. */ function isPublicDecryptAllowed(bytes32 ctHandle) external view virtual returns (bool) { MultichainACLStorage storage $ = _getMultichainACLStorage(); - return $.allowedPublicDecrypts[ctHandle]; + + return $.isAllowed[ctHandle]; } /** - * @dev See {IMultichainACL-isAccountAllowed}. + * @notice See {IMultichainACL-isAccountAllowed}. */ function isAccountAllowed(bytes32 ctHandle, address accountAddress) external view virtual returns (bool) { MultichainACLStorage storage $ = _getMultichainACLStorage(); - return $.allowedAccounts[ctHandle][accountAddress]; + + bytes32 allowHash = _getAllowAccountHash(ctHandle, accountAddress); + return $.isAllowed[allowHash]; } /** - * @dev See {IMultichainACL-isAccountDelegated}. + * @notice See {IMultichainACL-getAllowPublicDecryptConsensusTxSenders}. */ - function isAccountDelegated( - uint256 chainId, - DelegationAccounts calldata delegationAccounts, - address[] calldata contractAddresses - ) external view virtual returns (bool) { - // An account cannot be delegated to an empty list of contracts. - if (contractAddresses.length == 0) { - return false; - } - - // Check if each contract address is delegated. - MultichainACLStorage storage $ = _getMultichainACLStorage(); - for (uint256 i = 0; i < contractAddresses.length; i++) { - if ( - !$.delegatedContracts[delegationAccounts.delegatorAddress][delegationAccounts.delegatedAddress][ - chainId - ][contractAddresses[i]] - ) { - return false; - } - } - return true; - } - - /// @dev See {IMultichainACL-getAllowPublicDecryptConsensusTxSenders}. function getAllowPublicDecryptConsensusTxSenders( bytes32 ctHandle ) external view virtual returns (address[] memory) { MultichainACLStorage storage $ = _getMultichainACLStorage(); - return $.allowPublicDecryptConsensusTxSenders[ctHandle]; + return $.allowConsensusTxSenders[ctHandle]; } - /// @dev See {IMultichainACL-getAllowAccountConsensusTxSenders}. + /** + * @notice See {IMultichainACL-getAllowAccountConsensusTxSenders}. + */ function getAllowAccountConsensusTxSenders( bytes32 ctHandle, address accountAddress ) external view virtual returns (address[] memory) { MultichainACLStorage storage $ = _getMultichainACLStorage(); - return $.allowAccountConsensusTxSenders[ctHandle][accountAddress]; + bytes32 allowHash = _getAllowAccountHash(ctHandle, accountAddress); + return $.allowConsensusTxSenders[allowHash]; } /** - * @dev See {IMultichainACL-getDelegateAccountConsensusTxSenders}. - * The contract address list needs to be provided in the same order as when the consensus was reached - * in order to be able to retrieve the coprocessor transaction senders associated to it. + * @notice See {IMultichainACL-getVersion}. */ - function getDelegateAccountConsensusTxSenders( - uint256 chainId, - DelegationAccounts calldata delegationAccounts, - address[] calldata contractAddresses - ) external view virtual returns (address[] memory) { - MultichainACLStorage storage $ = _getMultichainACLStorage(); - - // Get the hash of the delegate account's inputs used to track the consensus. - bytes32 delegateAccountHash = _getDelegateAccountHash(chainId, delegationAccounts, contractAddresses); - - return $.delegateAccountConsensusTxSenders[delegateAccountHash]; - } - - /// @dev See {IMultichainACL-getVersion}. function getVersion() external pure virtual returns (string memory) { return string( @@ -334,31 +231,31 @@ contract MultichainACL is IMultichainACL, UUPSUpgradeableEmptyProxy, GatewayOwna } /** - * @dev Should revert when `msg.sender` is not authorized to upgrade the contract. + * @notice Checks if the sender is authorized to upgrade the contract and reverts otherwise. */ // solhint-disable-next-line no-empty-blocks function _authorizeUpgrade(address _newImplementation) internal virtual override onlyGatewayOwner {} - /// @notice Checks if the consensus is reached among the Coprocessors. - /// @param coprocessorCounter The number of coprocessors that agreed - /// @return Whether the consensus is reached + /** + * @notice Checks if the consensus is reached among the Coprocessors. + * @param coprocessorCounter The number of coprocessors that agreed + * @return Whether the consensus is reached + */ function _isConsensusReached(uint256 coprocessorCounter) internal view virtual returns (bool) { uint256 consensusThreshold = GATEWAY_CONFIG.getCoprocessorMajorityThreshold(); return coprocessorCounter >= consensusThreshold; } - /// @dev Returns the hash of a delegate account's inputs. - function _getDelegateAccountHash( - uint256 chainId, - DelegationAccounts calldata delegationAccounts, - address[] calldata contractAddresses - ) internal pure virtual returns (bytes32) { - return keccak256(abi.encode(chainId, delegationAccounts, contractAddresses)); + /** + * @notice Returns the hash of a allow account call. + */ + function _getAllowAccountHash(bytes32 ctHandle, address accountAddress) internal pure virtual returns (bytes32) { + return keccak256(abi.encode(ctHandle, accountAddress)); } /** - * @dev Returns the MultichainACL storage location. - * Note that this function is internal but not virtual: derived contracts should be able to + * @notice Returns the MultichainACL storage location. + * @dev Note that this function is internal but not virtual: derived contracts should be able to * access it, but if the underlying storage struct version changes, we force them to define a new * getter function and use that one instead in order to avoid overriding the storage location. */ diff --git a/gateway-contracts/contracts/emptyProxy/EmptyUUPSProxy.sol b/gateway-contracts/contracts/emptyProxy/EmptyUUPSProxy.sol index 33a318940..07595e2b8 100644 --- a/gateway-contracts/contracts/emptyProxy/EmptyUUPSProxy.sol +++ b/gateway-contracts/contracts/emptyProxy/EmptyUUPSProxy.sol @@ -21,7 +21,7 @@ contract EmptyUUPSProxy is UUPSUpgradeable, GatewayOwnable { function initialize() public initializer {} /** - * @dev Should revert when `msg.sender` is not authorized to upgrade the contract. + * @notice Checks if the sender is authorized to upgrade the contract and reverts otherwise. */ // solhint-disable-next-line no-empty-blocks function _authorizeUpgrade(address _newImplementation) internal virtual override onlyGatewayOwner {} diff --git a/gateway-contracts/contracts/emptyProxyGatewayConfig/EmptyUUPSProxyGatewayConfig.sol b/gateway-contracts/contracts/emptyProxyGatewayConfig/EmptyUUPSProxyGatewayConfig.sol index 99930dca9..b8fbd3206 100644 --- a/gateway-contracts/contracts/emptyProxyGatewayConfig/EmptyUUPSProxyGatewayConfig.sol +++ b/gateway-contracts/contracts/emptyProxyGatewayConfig/EmptyUUPSProxyGatewayConfig.sol @@ -25,7 +25,7 @@ contract EmptyUUPSProxyGatewayConfig is UUPSUpgradeable, Ownable2StepUpgradeable } /** - * @dev Should revert when `msg.sender` is not authorized to upgrade the contract. + * @notice Checks if the sender is authorized to upgrade the contract and reverts otherwise. */ // solhint-disable-next-line no-empty-blocks function _authorizeUpgrade(address _newImplementation) internal virtual override onlyOwner {} diff --git a/gateway-contracts/contracts/examples/CiphertextCommitsV2Example.sol b/gateway-contracts/contracts/examples/CiphertextCommitsV2Example.sol index 6e5579aae..e203d9cc7 100644 --- a/gateway-contracts/contracts/examples/CiphertextCommitsV2Example.sol +++ b/gateway-contracts/contracts/examples/CiphertextCommitsV2Example.sol @@ -5,16 +5,12 @@ pragma solidity ^0.8.24; import "../CiphertextCommits.sol"; contract CiphertextCommitsV2Example is CiphertextCommits { - /// @notice Name of the contract string private constant CONTRACT_NAME = "CiphertextCommits"; - /// @notice Version of the contract uint256 private constant MAJOR_VERSION = 1000; uint256 private constant MINOR_VERSION = 0; uint256 private constant PATCH_VERSION = 0; - /// @notice Getter for the name and version of the contract - /// @return string representing the name and the version of the contract function getVersion() external pure virtual override returns (string memory) { return string( diff --git a/gateway-contracts/contracts/examples/DecryptionV2Example.sol b/gateway-contracts/contracts/examples/DecryptionV2Example.sol index 20bf27c9f..0ceaa864e 100644 --- a/gateway-contracts/contracts/examples/DecryptionV2Example.sol +++ b/gateway-contracts/contracts/examples/DecryptionV2Example.sol @@ -5,16 +5,12 @@ pragma solidity ^0.8.24; import "../Decryption.sol"; contract DecryptionV2Example is Decryption { - /// @notice Name of the contract string private constant CONTRACT_NAME = "Decryption"; - /// @notice Version of the contract uint256 private constant MAJOR_VERSION = 1000; uint256 private constant MINOR_VERSION = 0; uint256 private constant PATCH_VERSION = 0; - /// @notice Getter for the name and version of the contract - /// @return string representing the name and the version of the contract function getVersion() external pure virtual override returns (string memory) { return string( diff --git a/gateway-contracts/contracts/examples/GatewayConfigV2Example.sol b/gateway-contracts/contracts/examples/GatewayConfigV2Example.sol index 7397e87ff..06432413a 100644 --- a/gateway-contracts/contracts/examples/GatewayConfigV2Example.sol +++ b/gateway-contracts/contracts/examples/GatewayConfigV2Example.sol @@ -5,16 +5,12 @@ pragma solidity ^0.8.24; import "../GatewayConfig.sol"; contract GatewayConfigV2Example is GatewayConfig { - /// @notice Name of the contract string private constant CONTRACT_NAME = "GatewayConfig"; - /// @notice Version of the contract uint256 private constant MAJOR_VERSION = 1000; uint256 private constant MINOR_VERSION = 0; uint256 private constant PATCH_VERSION = 0; - /// @notice Getter for the name and version of the contract - /// @return string representing the name and the version of the contract function getVersion() external pure virtual override returns (string memory) { return string( diff --git a/gateway-contracts/contracts/examples/InputVerificationV2Example.sol b/gateway-contracts/contracts/examples/InputVerificationV2Example.sol index 0174a936f..8eb002b0c 100644 --- a/gateway-contracts/contracts/examples/InputVerificationV2Example.sol +++ b/gateway-contracts/contracts/examples/InputVerificationV2Example.sol @@ -5,16 +5,12 @@ pragma solidity ^0.8.24; import "../InputVerification.sol"; contract InputVerificationV2Example is InputVerification { - /// @notice Name of the contract string private constant CONTRACT_NAME = "InputVerification"; - /// @notice Version of the contract uint256 private constant MAJOR_VERSION = 1000; uint256 private constant MINOR_VERSION = 0; uint256 private constant PATCH_VERSION = 0; - /// @notice Getter for the name and version of the contract - /// @return string representing the name and the version of the contract function getVersion() external pure virtual override returns (string memory) { return string( diff --git a/gateway-contracts/contracts/examples/KMSGenerationV2Example.sol b/gateway-contracts/contracts/examples/KMSGenerationV2Example.sol index 9b06e0657..b312dfa23 100644 --- a/gateway-contracts/contracts/examples/KMSGenerationV2Example.sol +++ b/gateway-contracts/contracts/examples/KMSGenerationV2Example.sol @@ -5,16 +5,12 @@ pragma solidity ^0.8.24; import "../KMSGeneration.sol"; contract KMSGenerationV2Example is KMSGeneration { - /// @notice Name of the contract string private constant CONTRACT_NAME = "KMSGeneration"; - /// @notice Version of the contract uint256 private constant MAJOR_VERSION = 1000; uint256 private constant MINOR_VERSION = 0; uint256 private constant PATCH_VERSION = 0; - /// @notice Getter for the name and version of the contract - /// @return string representing the name and the version of the contract function getVersion() external pure virtual override returns (string memory) { return string( diff --git a/gateway-contracts/contracts/examples/MultichainACLV2Example.sol b/gateway-contracts/contracts/examples/MultichainACLV2Example.sol index c24298636..7043c6d10 100644 --- a/gateway-contracts/contracts/examples/MultichainACLV2Example.sol +++ b/gateway-contracts/contracts/examples/MultichainACLV2Example.sol @@ -5,16 +5,12 @@ pragma solidity ^0.8.24; import "../MultichainACL.sol"; contract MultichainACLV2Example is MultichainACL { - /// @notice Name of the contract string private constant CONTRACT_NAME = "MultichainACL"; - /// @notice Version of the contract uint256 private constant MAJOR_VERSION = 1000; uint256 private constant MINOR_VERSION = 0; uint256 private constant PATCH_VERSION = 0; - /// @notice Getter for the name and version of the contract - /// @return string representing the name and the version of the contract function getVersion() external pure virtual override returns (string memory) { return string( diff --git a/gateway-contracts/contracts/immutable/PauserSet.sol b/gateway-contracts/contracts/immutable/PauserSet.sol index c5d33d975..041f01100 100644 --- a/gateway-contracts/contracts/immutable/PauserSet.sol +++ b/gateway-contracts/contracts/immutable/PauserSet.sol @@ -8,12 +8,14 @@ import { gatewayConfigAddress } from "../../addresses/GatewayAddresses.sol"; /** * @title PauserSet smart contract - * @dev See {IPauserSet} + * @notice See {IPauserSet} */ contract PauserSet is IPauserSet, GatewayOwnable { - /// @dev The following constants are used for versioning the contract. They are made private - /// @dev in order to force derived contracts to consider a different version. Note that - /// @dev they can still define their own private constants with the same name. + /** + * @dev The following constants are used for versioning the contract. They are made private + * in order to force derived contracts to consider a different version. Note that + * they can still define their own private constants with the same name. + */ string private constant CONTRACT_NAME = "PauserSet"; uint256 private constant MAJOR_VERSION = 0; uint256 private constant MINOR_VERSION = 1; @@ -21,7 +23,9 @@ contract PauserSet is IPauserSet, GatewayOwnable { mapping(address account => bool isPauser) pausers; - /// @dev See {IPauserSet-addPauser}. + /** + * @notice See {IPauserSet-addPauser}. + */ function addPauser(address account) external onlyGatewayOwner { if (account == address(0)) revert InvalidNullPauser(); if (pausers[account]) revert AccountAlreadyPauser(account); @@ -29,7 +33,9 @@ contract PauserSet is IPauserSet, GatewayOwnable { emit AddPauser(account); } - /// @dev See {IPauserSet-removePauser}. + /** + * @notice See {IPauserSet-removePauser}. + */ function removePauser(address account) external onlyGatewayOwner { if (account == address(0)) revert InvalidNullPauser(); if (!pausers[account]) revert AccountNotPauser(account); @@ -37,7 +43,9 @@ contract PauserSet is IPauserSet, GatewayOwnable { emit RemovePauser(account); } - /// @dev See {IPauserSet-swapPauser}. + /** + * @notice See {IPauserSet-swapPauser}. + */ function swapPauser(address oldAccount, address newAccount) external onlyGatewayOwner { if (oldAccount == address(0) || newAccount == address(0)) revert InvalidNullPauser(); if (!pausers[oldAccount]) revert AccountNotPauser(oldAccount); @@ -47,12 +55,16 @@ contract PauserSet is IPauserSet, GatewayOwnable { emit SwapPauser(oldAccount, newAccount); } - /// @dev See {IPauserSet-isPauser}. + /** + * @notice See {IPauserSet-isPauser}. + */ function isPauser(address account) external view returns (bool) { return pausers[account]; } - /// @dev See {IPauserSet-getVersion}. + /** + * @notice See {IPauserSet-getVersion}. + */ function getVersion() external pure returns (string memory) { return string( diff --git a/gateway-contracts/contracts/interfaces/IDecryption.sol b/gateway-contracts/contracts/interfaces/IDecryption.sol index 812730990..4e09f6785 100644 --- a/gateway-contracts/contracts/interfaces/IDecryption.sol +++ b/gateway-contracts/contracts/interfaces/IDecryption.sol @@ -97,10 +97,14 @@ interface IDecryption { */ event UserDecryptionResponseThresholdReached(uint256 indexed decryptionId); - /// @notice Error indicating that the input list of handles is empty. + /** + * @notice Error indicating that the input list of handles is empty. + */ error EmptyCtHandles(); - /// @notice Error indicating that the input list of ctHandleContractPairs is empty. + /** + * @notice Error indicating that the input list of ctHandleContractPairs is empty. + */ error EmptyCtHandleContractPairs(); /** @@ -136,7 +140,9 @@ interface IDecryption { */ error ContractAddressesMaxLengthExceeded(uint256 maxLength, uint256 actualLength); - /// @notice Error indicating that the durationDays of a user decryption request is 0. + /** + * @notice Error indicating that the durationDays of a user decryption request is 0. + */ error InvalidNullDurationDays(); /** @@ -168,13 +174,6 @@ interface IDecryption { */ error UserAddressInContractAddresses(address userAddress, address[] contractAddresses); - /** - * @notice Error indicating that the delegator address is included in the contract addresses list. - * @param delegatorAddress The delegator address that is included in the list. - * @param contractAddresses The list of expected contract addresses. - */ - error DelegatorAddressInContractAddresses(address delegatorAddress, address[] contractAddresses); - /** * @notice Error indicating that the contract address is not included in the contract addresses list. * @param contractAddress The contract address that is not in the list. @@ -241,26 +240,6 @@ interface IDecryption { bytes calldata extraData ) external; - /** - * @notice Requests a delegated user decryption. - * @param ctHandleContractPairs The ciphertexts to decrypt for associated contracts. - * @param requestValidity The validity period of the user decryption request. - * @param delegationAccounts The user's address and the delegated account address for the user decryption. - * @param contractsInfo The contracts' information (chain ID, addresses). - * @param publicKey The user's public key to reencrypt the decryption shares. - * @param signature The EIP712 signature to verify. - * @param extraData Generic bytes metadata for versioned payloads. First byte is for the version. - */ - function delegatedUserDecryptionRequest( - CtHandleContractPair[] calldata ctHandleContractPairs, - RequestValidity calldata requestValidity, - DelegationAccounts calldata delegationAccounts, - ContractsInfo calldata contractsInfo, - bytes calldata publicKey, - bytes calldata signature, - bytes calldata extraData - ) external; - /** * @notice Responds to a user decryption request. * @param decryptionId The decryption request ID associated with the response. @@ -297,22 +276,6 @@ interface IDecryption { bytes calldata extraData ) external view returns (bool); - /** - * @notice Indicates if handles are ready to be decrypted by a delegated address. - * @param contractsChainId The host chain ID, where the contracts are deployed. - * @param delegationAccounts The delegator and delegated address. - * @param ctHandleContractPairs The ciphertext handles with associated contract addresses. - * @param contractAddresses The contract addresses. - * @param extraData Generic bytes metadata for versioned payloads. First byte is for the version. - */ - function isDelegatedUserDecryptionReady( - uint256 contractsChainId, - DelegationAccounts calldata delegationAccounts, - CtHandleContractPair[] calldata ctHandleContractPairs, - address[] calldata contractAddresses, - bytes calldata extraData - ) external view returns (bool); - /** * @notice Indicates if a (public, user, delegated user) decryption is done. * @param decryptionId The decryption request ID. diff --git a/gateway-contracts/contracts/interfaces/IGatewayConfig.sol b/gateway-contracts/contracts/interfaces/IGatewayConfig.sol index c5103395c..8ebe07e87 100644 --- a/gateway-contracts/contracts/interfaces/IGatewayConfig.sol +++ b/gateway-contracts/contracts/interfaces/IGatewayConfig.sol @@ -71,13 +71,19 @@ interface IGatewayConfig { */ error NotPauser(address account); - /// @notice Error emitted when the KMS nodes list is empty. + /** + * @notice Error emitted when the KMS nodes list is empty. + */ error EmptyKmsNodes(); - /// @notice Error emitted when the coprocessors list is empty. + /** + * @notice Error emitted when the coprocessors list is empty. + */ error EmptyCoprocessors(); - /// @notice Error emitted when the custodians list is empty. + /** + * @notice Error emitted when the custodians list is empty. + */ error EmptyCustodians(); /** @@ -87,26 +93,40 @@ interface IGatewayConfig { */ error InvalidHighMpcThreshold(uint256 mpcThreshold, uint256 nKmsNodes); - /// @notice Error emitted when the public decryption threshold is null. + /** + * @notice Error emitted when the public decryption threshold is null. + */ error InvalidNullPublicDecryptionThreshold(); - /// @notice Error emitted when the public decryption threshold is strictly greater than the number of KMS nodes. - /// @param publicDecryptionThreshold The public decryption threshold. - /// @param nKmsNodes The number of KMS nodes. + /** + * @notice Error emitted when the public decryption threshold is strictly greater than the number of KMS nodes. + * @param publicDecryptionThreshold The public decryption threshold. + * @param nKmsNodes The number of KMS nodes. + */ error InvalidHighPublicDecryptionThreshold(uint256 publicDecryptionThreshold, uint256 nKmsNodes); - /// @notice Error emitted when the user decryption threshold is null. + /** + * @notice Error emitted when the user decryption threshold is null. + */ error InvalidNullUserDecryptionThreshold(); - /// @notice Error emitted when the user decryption threshold is strictly greater than the number of KMS nodes. - /// @param userDecryptionThreshold The user decryption threshold. - /// @param nKmsNodes The number of KMS nodes. + /** + * @notice Error emitted when the user decryption threshold is strictly greater than the number of KMS nodes. + * @param userDecryptionThreshold The user decryption threshold. + * @param nKmsNodes The number of KMS nodes. + */ error InvalidHighUserDecryptionThreshold(uint256 userDecryptionThreshold, uint256 nKmsNodes); - /// @notice Error emitted when the key and CRS generation threshold is null. + /** + * @notice Error emitted when the key and CRS generation threshold is null. + */ error InvalidNullKmsGenThreshold(); - /// @notice Error emitted when the key and CRS generation threshold is strictly greater than the number of KMS nodes. + /** + * @notice Error emitted when the key and CRS generation threshold is strictly greater than the number of KMS nodes. + * @param kmsGenThreshold The key and CRS generation threshold. + * @param nKmsNodes The number of KMS nodes. + */ error InvalidHighKmsGenThreshold(uint256 kmsGenThreshold, uint256 nKmsNodes); /** diff --git a/gateway-contracts/contracts/interfaces/IInputVerification.sol b/gateway-contracts/contracts/interfaces/IInputVerification.sol index f4cbeb618..bd596c446 100644 --- a/gateway-contracts/contracts/interfaces/IInputVerification.sol +++ b/gateway-contracts/contracts/interfaces/IInputVerification.sol @@ -3,7 +3,8 @@ pragma solidity ^0.8.24; /** * @title Interface for the InputVerification contract. - * @dev The InputVerification contract handles Zero-Knowledge Proof of Knowledge (ZKPoK) verifications for inputs. + * @notice The InputVerification contract handles Zero-Knowledge Proof of Knowledge (ZKPoK) + * verifications for inputs. */ interface IInputVerification { /** diff --git a/gateway-contracts/contracts/interfaces/IMultichainACL.sol b/gateway-contracts/contracts/interfaces/IMultichainACL.sol index 9aef15131..a651651ad 100644 --- a/gateway-contracts/contracts/interfaces/IMultichainACL.sol +++ b/gateway-contracts/contracts/interfaces/IMultichainACL.sol @@ -21,14 +21,6 @@ interface IMultichainACL { */ event AllowPublicDecrypt(bytes32 indexed ctHandle); - /** - * @notice Emitted when an account delegates its access to another account. - * @param chainId The chain ID of the registered host chain where the contracts are deployed. - * @param delegationAccounts The delegator and the delegated addresses. - * @param contractAddresses The addresses of the delegated contracts. - */ - event DelegateAccount(uint256 indexed chainId, DelegationAccounts delegationAccounts, address[] contractAddresses); - /** * @notice Error indicating that the coprocessor has already allowed public decryption to the ciphertext. * @param ctHandle The ciphertext handle that the coprocessor has already allowed access to. @@ -45,20 +37,8 @@ interface IMultichainACL { error CoprocessorAlreadyAllowedAccount(bytes32 ctHandle, address account, address txSender); /** - * @notice Error indicating that the coprocessor has already delegated access to another account. - * @param chainId The chain ID of the registered host chain where the contracts are deployed. - * @param delegationAccounts The delegator and the delegated addresses. - * @param contractAddresses The addresses of the contracts that the coprocessor has already delegated. - * @param txSender The transaction sender address of the coprocessor that has already confirmed delegation. + * @notice Error indicating that the contract addresses list is empty. */ - error CoprocessorAlreadyDelegated( - uint256 chainId, - DelegationAccounts delegationAccounts, - address[] contractAddresses, - address txSender - ); - - /// @notice Error indicating that the contract addresses list is empty. error EmptyContractAddresses(); /** @@ -83,18 +63,6 @@ interface IMultichainACL { */ function allowAccount(bytes32 ctHandle, address accountAddress, bytes calldata extraData) external; - /** - * @notice Delegates the access to the delegated and contract addresses. - * @param chainId The chain ID of the registered host chain where the contracts are deployed. - * @param delegationAccounts The delegator and the delegated addresses. - * @param contractAddresses The contract addresses to delegate access to. - */ - function delegateAccount( - uint256 chainId, - DelegationAccounts calldata delegationAccounts, - address[] calldata contractAddresses - ) external; - /** * @notice Indicates if the ciphertext handle is allowed for public decryption. * @param ctHandle The handle of the ciphertext. @@ -108,18 +76,6 @@ interface IMultichainACL { */ function isAccountAllowed(bytes32 ctHandle, address accountAddress) external view returns (bool); - /** - * @notice Indicates if the delegator has delegated access to the delegate and contracts addresses. - * @param chainId The chain ID of the registered host chain where the contracts are deployed. - * @param delegationAccounts The delegator and the delegated addresses. - * @param contractAddresses The delegated contract addresses. - */ - function isAccountDelegated( - uint256 chainId, - DelegationAccounts calldata delegationAccounts, - address[] calldata contractAddresses - ) external view returns (bool); - /** * @notice Returns the coprocessor transaction sender addresses that were involved in the consensus for an allow public decrypt. * @param ctHandle The ciphertext handle. @@ -136,18 +92,6 @@ interface IMultichainACL { address accountAddress ) external view returns (address[] memory); - /** - * @notice Returns the coprocessor transaction sender addresses that were involved in the consensus for a delegate account. - * @param chainId The chain ID of the registered host chain where the contracts are deployed. - * @param delegationAccounts The delegator and the delegated addresses. - * @param contractAddresses The delegated contract addresses. - */ - function getDelegateAccountConsensusTxSenders( - uint256 chainId, - DelegationAccounts calldata delegationAccounts, - address[] calldata contractAddresses - ) external view returns (address[] memory); - /** * @notice Returns the versions of the MultichainACL contract in SemVer format. * @dev This is conventionally used for upgrade features. diff --git a/gateway-contracts/contracts/interfaces/IPauserSet.sol b/gateway-contracts/contracts/interfaces/IPauserSet.sol index 27fc57617..82e36d65f 100644 --- a/gateway-contracts/contracts/interfaces/IPauserSet.sol +++ b/gateway-contracts/contracts/interfaces/IPauserSet.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.24; /** * @title Interface for the PauserSet contract. * @notice The PauserSet contract stores the list of all accounts who can pause gateway contracts. - * @notice only GatewayConfig owner should be able to add or remove pausers. + * Only the GatewayConfig owner should be able to add or remove pausers. */ interface IPauserSet { /** diff --git a/gateway-contracts/contracts/libraries/FHETypeBitSizes.sol b/gateway-contracts/contracts/libraries/FHETypeBitSizes.sol index 147fa3dc6..abfb46c58 100644 --- a/gateway-contracts/contracts/libraries/FHETypeBitSizes.sol +++ b/gateway-contracts/contracts/libraries/FHETypeBitSizes.sol @@ -3,9 +3,15 @@ pragma solidity ^0.8.24; import "../shared/FheType.sol"; +/** + * @title FHETypeBitSizes library + * @notice Library that provides utility functions for FHE types + */ library FHETypeBitSizes { - // Cleartext bit size for each FHE type. - // Note that ebool have a bit size of 2. + /** + * @notice Cleartext bit size for each FHE type. + * @dev Note that ebool have a bit size of 2. + */ uint16 internal constant EBOOL_SIZE = 2; uint16 internal constant EUINT8_SIZE = 8; uint16 internal constant EUINT16_SIZE = 16; @@ -14,24 +20,29 @@ library FHETypeBitSizes { uint16 internal constant EUINT128_SIZE = 128; uint16 internal constant EUINT160_SIZE = 160; uint16 internal constant EUINT256_SIZE = 256; - /// @notice Error thrown when FHE type is not supported. - /// @param fheType The unsupported FHE type. + + /** + * @notice Error thrown when FHE type is not supported. + * @param fheType The unsupported FHE type. + */ error UnsupportedFHEType(FheType fheType); - /// @notice Get the bit size for a given FHE type. - /// @param fheType The FHE type. - /// @return The bit size for the given FHE type. + /** + * @notice Get the bit size for a given FHE type. + * @param fheType The FHE type. + * @return The bit size for the given FHE type. + */ // solhint-disable-next-line code-complexity function getBitSize(FheType fheType) internal pure returns (uint16) { - /// @dev The following normally triggers a "cyclomatic complexity" error from solhint. - /// @dev This could be avoid by, for example, using fixed array that maps types with sizes. - /// @dev Still, we keep considering if-else branches as it will be easier to maintain if we - /// @dev need to consider or remove other types in the future. - /// @dev The full list of FHE types is available in the `FheType` enum and comes from the - /// @dev `fhevm-solidity` repository, which is directly based on TFHE-rs' list of supported - /// @dev types. - /// @dev Note that only a subset of them are currently supported (in particular, Uint4 is not - /// @dev supported). This list is also defined in the `fhevm-solidity` repository. + // The following normally triggers a "cyclomatic complexity" error from solhint. + // This could be avoid by, for example, using fixed array that maps types with sizes. + // Still, we keep considering if-else branches as it will be easier to maintain if we + // need to consider or remove other types in the future. + // The full list of FHE types is available in the `FheType` enum and comes from the + // `fhevm-solidity` repository, which is directly based on TFHE-rs' list of supported + // types. + // Note that only a subset of them are currently supported (in particular, Uint4 is not + // supported). This list is also defined in the `fhevm-solidity` repository. if (fheType == FheType.Bool) { return EBOOL_SIZE; } else if (fheType == FheType.Uint8) { diff --git a/gateway-contracts/contracts/libraries/HandleOps.sol b/gateway-contracts/contracts/libraries/HandleOps.sol index 29915c829..0c5a789ce 100644 --- a/gateway-contracts/contracts/libraries/HandleOps.sol +++ b/gateway-contracts/contracts/libraries/HandleOps.sol @@ -3,43 +3,51 @@ pragma solidity ^0.8.24; import "../shared/FheType.sol"; -/// @title HandleOps library -/// @notice Library that provides utility functions for ciphertext handles -/// @dev Handles have the following format: -/// @dev [21 first random bytes from hashing] | index_21 | chainID_22...29 | fheType_30 | version_31 +/** + * @title HandleOps library + * @notice Library that provides utility functions for ciphertext handles + * @dev Handles have the following format: + * [21 first random bytes from hashing] | index_21 | chainID_22...29 | fheType_30 | version_31 + */ library HandleOps { - /// @notice Error indicating that the FHE type is invalid - /// @param fheTypeUint8 The invalid FHE type as a uint8 + /** + * @notice Error indicating that the FHE type is invalid + * @param fheTypeUint8 The invalid FHE type as a uint8 + */ error InvalidFHEType(uint8 fheTypeUint8); - /// @notice Extracts the chain ID from a ciphertext handle - /// @param handle The ciphertext handle - /// @return The chain ID + /** + * @notice Extracts the chain ID from a ciphertext handle + * @param handle The ciphertext handle + * @return The chain ID + */ function extractChainId(bytes32 handle) internal pure returns (uint256) { - /// @dev The chain ID is a 64-bit integer (8 bytes) represented by the handles' 23rd to 30th - /// @dev bytes (index 22 to 29). - /// @dev We thus cast the handle to a uint256, shift it 2 bytes (2*8=16 bits) to the right - /// @dev and mask the result with a 64-bit mask to retrieve the expected value - /// @dev We then cast the result to a uint256 for consistency with the usual chain ID type - /// @dev Note that right shift + masking is slightly more gas efficient then left + right shift - /// @dev when extracting multiple bytes + // The chain ID is a 64-bit integer (8 bytes) represented by the handles' 23rd to 30th + // bytes (index 22 to 29). + // We thus cast the handle to a uint256, shift it 2 bytes (2*8=16 bits) to the right + // and mask the result with a 64-bit mask to retrieve the expected value + // We then cast the result to a uint256 for consistency with the usual chain ID type + // Note that right shift + masking is slightly more gas efficient then left + right shift + // when extracting multiple bytes return uint256((uint256(handle) >> 16) & 0xFFFFFFFFFFFFFFFF); } - /// @notice Extracts the FHE type from a ciphertext handle - /// @param handle The ciphertext handle - /// @return The FHE type + /** + * @notice Extracts the FHE type from a ciphertext handle + * @param handle The ciphertext handle + * @return The FHE type + */ function extractFheType(bytes32 handle) internal pure returns (FheType) { - /// @dev The FHE type is a 8-bit integer (1 byte) represented by the handles' 31st byte (index 30) - /// @dev We thus shift the handle by 30 bytes (30*8=240 bits) to the left and then shift it - /// @dev by 31 bytes (31*8=248 bits) to the right to retrieve the expected value - /// @dev We then cast the result to a uint8 in order to better represent the expected enum. - /// @dev Note that extracting a single byte left + right shift is slightly more gas efficient then : - /// @dev - right shift + masking (`uint256(handle) >> 8) & 0xFF`) - /// @dev - directly extract the byte at index 30 (`handle[30]`) + // The FHE type is a 8-bit integer (1 byte) represented by the handles' 31st byte (index 30) + // We thus shift the handle by 30 bytes (30*8=240 bits) to the left and then shift it + // by 31 bytes (31*8=248 bits) to the right to retrieve the expected value + // We then cast the result to a uint8 in order to better represent the expected enum. + // Note that extracting a single byte left + right shift is slightly more gas efficient then : + // - right shift + masking (`uint256(handle) >> 8) & 0xFF`) + // - directly extract the byte at index 30 (`handle[30]`) uint8 fheTypeUint8 = uint8(uint256((handle << 240) >> 248)); - /// @dev Check that the FHE type is valid. Revert with an explicit error if it is not. + // Check that the FHE type is valid. Revert with an explicit error if it is not. if (fheTypeUint8 > uint8(type(FheType).max)) { revert InvalidFHEType(fheTypeUint8); } diff --git a/gateway-contracts/contracts/mocks/DecryptionMock.sol b/gateway-contracts/contracts/mocks/DecryptionMock.sol index a19e71838..05625023f 100644 --- a/gateway-contracts/contracts/mocks/DecryptionMock.sol +++ b/gateway-contracts/contracts/mocks/DecryptionMock.sol @@ -34,15 +34,6 @@ contract DecryptionMock { bytes extraData; } - struct DelegatedUserDecryptRequestVerification { - bytes publicKey; - address[] contractAddresses; - address delegatorAddress; - uint256 startTimestamp; - uint256 durationDays; - bytes extraData; - } - struct UserDecryptionPayload { bytes publicKey; bytes32[] ctHandles; @@ -117,23 +108,6 @@ contract DecryptionMock { emit UserDecryptionRequest(decryptionId, snsCtMaterials, userAddress, publicKey, extraData); } - function delegatedUserDecryptionRequest( - CtHandleContractPair[] calldata ctHandleContractPairs, - RequestValidity calldata requestValidity, - DelegationAccounts calldata delegationAccounts, - ContractsInfo calldata contractsInfo, - bytes calldata publicKey, - bytes calldata signature, - bytes calldata extraData - ) external { - userDecryptionCounter++; - uint256 decryptionId = userDecryptionCounter; - SnsCiphertextMaterial[] memory snsCtMaterials = new SnsCiphertextMaterial[](1); - address userAddress; - - emit UserDecryptionRequest(decryptionId, snsCtMaterials, userAddress, publicKey, extraData); - } - function userDecryptionResponse( uint256 decryptionId, bytes calldata userDecryptedShare, diff --git a/gateway-contracts/contracts/mocks/MultichainACLMock.sol b/gateway-contracts/contracts/mocks/MultichainACLMock.sol index e5395d5fc..47731c7e7 100644 --- a/gateway-contracts/contracts/mocks/MultichainACLMock.sol +++ b/gateway-contracts/contracts/mocks/MultichainACLMock.sol @@ -7,8 +7,6 @@ contract MultichainACLMock { event AllowPublicDecrypt(bytes32 indexed ctHandle); - event DelegateAccount(uint256 indexed chainId, DelegationAccounts delegationAccounts, address[] contractAddresses); - function allowPublicDecrypt(bytes32 ctHandle, bytes calldata /* unusedVariable */) external { emit AllowPublicDecrypt(ctHandle); } @@ -16,12 +14,4 @@ contract MultichainACLMock { function allowAccount(bytes32 ctHandle, address accountAddress, bytes calldata /* unusedVariable */) external { emit AllowAccount(ctHandle, accountAddress); } - - function delegateAccount( - uint256 chainId, - DelegationAccounts calldata delegationAccounts, - address[] calldata contractAddresses - ) external { - emit DelegateAccount(chainId, delegationAccounts, contractAddresses); - } } diff --git a/gateway-contracts/contracts/shared/FheType.sol b/gateway-contracts/contracts/shared/FheType.sol index fc570e1da..8f60ae5d0 100644 --- a/gateway-contracts/contracts/shared/FheType.sol +++ b/gateway-contracts/contracts/shared/FheType.sol @@ -1,6 +1,9 @@ // SPDX-License-Identifier: BSD-3-Clause-Clear pragma solidity ^0.8.24; +/** + * @notice FHE types. + */ enum FheType { Bool, Uint4, diff --git a/gateway-contracts/contracts/shared/GatewayConfigChecks.sol b/gateway-contracts/contracts/shared/GatewayConfigChecks.sol index b92271f3f..441680000 100644 --- a/gateway-contracts/contracts/shared/GatewayConfigChecks.sol +++ b/gateway-contracts/contracts/shared/GatewayConfigChecks.sol @@ -10,7 +10,9 @@ import { HandleOps } from "../libraries/HandleOps.sol"; * @dev Contract that provides checks on top of the GatewayConfig contract */ abstract contract GatewayConfigChecks { - /// @notice The address of the GatewayConfig contract + /** + * @notice The address of the GatewayConfig contract. + */ IGatewayConfig private constant GATEWAY_CONFIG = IGatewayConfig(gatewayConfigAddress); /** @@ -43,7 +45,7 @@ abstract contract GatewayConfigChecks { */ error NotCustodianTxSender(address txSenderAddress); - /* + /** * @notice Error emitted when an address is not a custodian signer. * @param signerAddress The address that is not a custodian signer. */ @@ -96,12 +98,20 @@ abstract contract GatewayConfigChecks { _; } + /** + * @notice Checks if the address is a KMS signer. + * @param signerAddress The address to check. + */ function _checkIsKmsSigner(address signerAddress) internal view { if (!GATEWAY_CONFIG.isKmsSigner(signerAddress)) { revert NotKmsSigner(signerAddress); } } + /** + * @notice Checks if the address is a coprocessor signer. + * @param signerAddress The address to check. + */ function _checkIsCoprocessorSigner(address signerAddress) internal view { if (!GATEWAY_CONFIG.isCoprocessorSigner(signerAddress)) { revert NotCoprocessorSigner(signerAddress); diff --git a/gateway-contracts/contracts/shared/GatewayOwnable.sol b/gateway-contracts/contracts/shared/GatewayOwnable.sol index ff5a839ca..913d669e5 100644 --- a/gateway-contracts/contracts/shared/GatewayOwnable.sol +++ b/gateway-contracts/contracts/shared/GatewayOwnable.sol @@ -18,7 +18,9 @@ abstract contract GatewayOwnable { */ error NotGatewayOwner(address sender); - /// @dev Check that the sender is the owner of the GatewayConfig contract. + /** + * @notice Checks if the sender is the owner of the GatewayConfig contract. + */ modifier onlyGatewayOwner() { /** * @dev We cast to Ownable2StepUpgradeable instead of importing GatewayConfig diff --git a/gateway-contracts/contracts/shared/KMSRequestCounters.sol b/gateway-contracts/contracts/shared/KMSRequestCounters.sol index cfebfdbd2..a1151e07d 100644 --- a/gateway-contracts/contracts/shared/KMSRequestCounters.sol +++ b/gateway-contracts/contracts/shared/KMSRequestCounters.sol @@ -1,12 +1,13 @@ // SPDX-License-Identifier: BSD-3-Clause-Clear pragma solidity ^0.8.24; -// Define the KMS request types -// The old decryption request (a mix of public and user decryption requests) is deprecated. Is it kept -// in order to stay backward compatible and avoid overlaps between the old and new decryption request IDs. -// See `Decryption.sol` for more details. +/** + * @notice The KMS request types. + * @dev The first request type is deprecated. + * See `Decryption.sol` for more details. + */ enum RequestType { - _deprecated_, // 0: DEPRECATED (old decryption requests) + _deprecated_, // 0: DEPRECATED PublicDecrypt, // 1 UserDecrypt, // 2 PrepKeygen, // 3 diff --git a/gateway-contracts/contracts/shared/MultichainACLChecks.sol b/gateway-contracts/contracts/shared/MultichainACLChecks.sol index 94d1c4b83..f4018cdc9 100644 --- a/gateway-contracts/contracts/shared/MultichainACLChecks.sol +++ b/gateway-contracts/contracts/shared/MultichainACLChecks.sol @@ -3,14 +3,15 @@ pragma solidity ^0.8.24; import { multichainACLAddress } from "../../addresses/GatewayAddresses.sol"; import { IMultichainACL } from "../interfaces/IMultichainACL.sol"; -import { DelegationAccounts } from "../shared/Structs.sol"; /** * @title MultichainACL Checks * @dev Contract that provides checks on top of the MultichainACL contract */ abstract contract MultichainACLChecks { - /// @notice The address of the MultichainACL contract + /** + * @notice The address of the MultichainACL contract. + */ IMultichainACL private constant MULTICHAIN_ACL = IMultichainACL(multichainACLAddress); /** @@ -27,36 +28,23 @@ abstract contract MultichainACLChecks { error AccountNotAllowedToUseCiphertext(bytes32 ctHandle, address accountAddress); /** - * @notice Error indicating that the account has not been fully delegated. - * @param chainId The chain ID of the registered host chain where the contracts are deployed. - * @param delegationAccounts The delegator and the delegated addresses. - * @param contractAddresses The addresses of the delegated contracts. + * @notice Checks if the ciphertext handle is allowed for public decryption. + * @param ctHandle The ciphertext handle to check. */ - error AccountNotDelegatedForContracts( - uint256 chainId, - DelegationAccounts delegationAccounts, - address[] contractAddresses - ); - function _checkIsPublicDecryptAllowed(bytes32 ctHandle) internal view { if (!MULTICHAIN_ACL.isPublicDecryptAllowed(ctHandle)) { revert PublicDecryptNotAllowed(ctHandle); } } + /** + * @notice Checks if the account is allowed to use the ciphertext handle. + * @param ctHandle The ciphertext handle to check. + * @param accountAddress The address of the account to check. + */ function _checkIsAccountAllowed(bytes32 ctHandle, address accountAddress) internal view { if (!MULTICHAIN_ACL.isAccountAllowed(ctHandle, accountAddress)) { revert AccountNotAllowedToUseCiphertext(ctHandle, accountAddress); } } - - function _checkIsAccountDelegated( - uint256 chainId, - DelegationAccounts calldata delegationAccounts, - address[] calldata contractAddresses - ) internal view { - if (!MULTICHAIN_ACL.isAccountDelegated(chainId, delegationAccounts, contractAddresses)) { - revert AccountNotDelegatedForContracts(chainId, delegationAccounts, contractAddresses); - } - } } diff --git a/gateway-contracts/contracts/shared/Pausable.sol b/gateway-contracts/contracts/shared/Pausable.sol index 25fc5b140..30e1d27f2 100644 --- a/gateway-contracts/contracts/shared/Pausable.sol +++ b/gateway-contracts/contracts/shared/Pausable.sol @@ -12,7 +12,9 @@ import { IGatewayConfig } from "../interfaces/IGatewayConfig.sol"; * based on the OpenZeppelin PausableUpgradeable contract. */ abstract contract Pausable is PausableUpgradeable { - /// @notice The address of the GatewayConfig contract + /** + * @notice The address of the GatewayConfig contract. + */ IGatewayConfig private constant GATEWAY_CONFIG = IGatewayConfig(gatewayConfigAddress); /** @@ -51,11 +53,9 @@ abstract contract Pausable is PausableUpgradeable { * - The contract must be paused. */ function unpause() external virtual { - /** - * @dev We cast to Ownable2StepUpgradeable instead of importing GatewayConfig - * to avoid a circular dependency. Solidity requires that base contracts be defined - * before derived contracts, which GatewayConfig would violate in this context. - */ + // We cast to Ownable2StepUpgradeable instead of importing GatewayConfig + // to avoid a circular dependency. Solidity requires that base contracts be defined + // before derived contracts, which GatewayConfig would violate in this context. if (msg.sender != Ownable2StepUpgradeable(gatewayConfigAddress).owner() && msg.sender != gatewayConfigAddress) { revert NotOwnerOrGatewayConfig(msg.sender); } diff --git a/gateway-contracts/contracts/shared/Structs.sol b/gateway-contracts/contracts/shared/Structs.sol index 6763a67ee..226058b62 100644 --- a/gateway-contracts/contracts/shared/Structs.sol +++ b/gateway-contracts/contracts/shared/Structs.sol @@ -1,7 +1,9 @@ // SPDX-License-Identifier: BSD-3-Clause-Clear pragma solidity ^0.8.24; -/// @notice Struct that contains metadata about the protocol +/** + * @notice Struct that contains metadata about the protocol. + */ struct ProtocolMetadata { /// @notice Name of the protocol string name; @@ -9,7 +11,9 @@ struct ProtocolMetadata { string website; } -/// @notice Struct that represents a KMS (Key Management Service) node +/** + * @notice Struct that represents a KMS (Key Management Service) node. + */ struct KmsNode { /// @notice Address of the KMS node's transaction sender (also called KMS connector) address txSenderAddress; @@ -21,7 +25,9 @@ struct KmsNode { string storageUrl; } -/// @notice Struct that represents a coprocessor +/** + * @notice Struct that represents a coprocessor. + */ struct Coprocessor { /// @notice Address of the coprocessor's transaction sender address txSenderAddress; @@ -31,7 +37,9 @@ struct Coprocessor { string s3BucketUrl; } -/// @notice Struct that represents a custodian +/** + * @notice Struct that represents a custodian. + */ struct Custodian { /// @notice Address of the custodian's transaction sender. address txSenderAddress; @@ -41,7 +49,9 @@ struct Custodian { bytes encryptionKey; } -/// @notice Struct that represents a host chain +/** + * @notice Struct that represents a host chain. + */ struct HostChain { /// @notice Chain ID of the host chain (unique identifier) uint256 chainId; @@ -79,7 +89,7 @@ struct CiphertextMaterial { /** * @notice A struct that contains a ciphertext handle and a contract address that is - * @notice expected to be allowed to decrypt this ciphertext + * expected to be allowed to decrypt this ciphertext */ struct CtHandleContractPair { /// @notice The handle of the ciphertext @@ -87,13 +97,3 @@ struct CtHandleContractPair { /// @notice The address of the contract address contractAddress; } - -/** - * @notice A struct that contains the delegator and the delegated addresses - */ -struct DelegationAccounts { - /// @notice The address of the account that delegates access to its handles. - address delegatorAddress; - /// @notice The address of the account that receives the delegation. - address delegatedAddress; -} diff --git a/gateway-contracts/docs/getting-started/deployment/env_variables.md b/gateway-contracts/docs/getting-started/deployment/env_variables.md index 83d7136c2..9002de359 100644 --- a/gateway-contracts/docs/getting-started/deployment/env_variables.md +++ b/gateway-contracts/docs/getting-started/deployment/env_variables.md @@ -96,7 +96,6 @@ KMS_GENERATION_THRESHOLD="3" # (uint256) `KMS_GENERATION_THRESHOLD` must be non-null and less or equal to the number of KMS nodes registered below. - - KMS Nodes: ```bash diff --git a/gateway-contracts/hardhat.config.ts b/gateway-contracts/hardhat.config.ts index a50021446..a2d391da7 100644 --- a/gateway-contracts/hardhat.config.ts +++ b/gateway-contracts/hardhat.config.ts @@ -31,8 +31,8 @@ const chainIds = { hardhat: 31337, localGateway: 123456, staging: 54321, - devnet: 10899, - testnet: 55815, + devnet: 10900, + testnet: 10901, }; // If the mnemonic is not set, use a default one diff --git a/gateway-contracts/rust_bindings/src/ciphertext_commits.rs b/gateway-contracts/rust_bindings/src/ciphertext_commits.rs index 8b3dfc94b..0ae854cb2 100644 --- a/gateway-contracts/rust_bindings/src/ciphertext_commits.rs +++ b/gateway-contracts/rust_bindings/src/ciphertext_commits.rs @@ -525,22 +525,22 @@ pub mod CiphertextCommits { /// The creation / init bytecode of the contract. /// /// ```text - ///0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801562000043575f80fd5b50620000546200005a60201b60201c565b620001c4565b5f6200006b6200015e60201b60201c565b9050805f0160089054906101000a900460ff1615620000b6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146200015b5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051620001529190620001a9565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b620001a38162000185565b82525050565b5f602082019050620001be5f83018462000198565b92915050565b60805161277d620001eb5f395f81816110ab0152818161110001526113a2015261277d5ff3fe608060405260043610610090575f3560e01c806355c4d9971161005857806355c4d9971461015657806390f3035414610192578063a14f8971146101ba578063ad3cb1cc146101f6578063e6f6ab941461022057610090565b80630d8e6e2c146100945780632ddc9a6f146100be57806339f73810146100fa5780634f1ef2861461011057806352d1902d1461012c575b5f80fd5b34801561009f575f80fd5b506100a861025c565b6040516100b59190611a26565b60405180910390f35b3480156100c9575f80fd5b506100e460048036038101906100df9190611a8a565b6102d7565b6040516100f19190611acf565b60405180910390f35b348015610105575f80fd5b5061010e61030b565b005b61012a60048036038101906101259190611c6e565b61047b565b005b348015610137575f80fd5b5061014061049a565b60405161014d9190611cd7565b60405180910390f35b348015610161575f80fd5b5061017c60048036038101906101779190611d4d565b6104cb565b6040516101899190611f91565b60405180910390f35b34801561019d575f80fd5b506101b860048036038101906101b39190611fdb565b610748565b005b3480156101c5575f80fd5b506101e060048036038101906101db9190611d4d565b610bf5565b6040516101ed919061215a565b60405180910390f35b348015610201575f80fd5b5061020a610e72565b6040516102179190611a26565b60405180910390f35b34801561022b575f80fd5b5061024660048036038101906102419190611a8a565b610eab565b60405161025391906121e6565b60405180910390f35b60606040518060400160405280601181526020017f43697068657274657874436f6d6d69747300000000000000000000000000000081525061029d5f610f6d565b6102a76001610f6d565b6102b05f610f6d565b6040516020016102c394939291906122d4565b604051602081830303815290604052905090565b5f806102e1611037565b9050806003015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b600161031561105e565b67ffffffffffffffff1614610356576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f610361611082565b9050805f0160089054906101000a900460ff16806103a957508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b156103e0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff0219169083151502179055505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d28260405161046f9190612354565b60405180910390a15050565b6104836110a9565b61048c8261118f565b6104968282611282565b5050565b5f6104a36113a0565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b60605f6104d6611037565b90508383905067ffffffffffffffff8111156104f5576104f4611b4a565b5b60405190808252806020026020018201604052801561052e57816020015b61051b611946565b8152602001906001900390816105135790505b5091505f5b84849050811015610740576105608585838181106105545761055361236d565b5b905060200201356102d7565b6105ba578484828181106105775761057661236d565b5b905060200201356040517f0666cbdf0000000000000000000000000000000000000000000000000000000081526004016105b19190611cd7565b60405180910390fd5b5f826005015f8787858181106105d3576105d261236d565b5b9050602002013581526020019081526020015f205490505f836007015f8381526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561067b57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610632575b5050505050905060405180608001604052808888868181106106a05761069f61236d565b5b905060200201358152602001855f015f8a8a888181106106c3576106c261236d565b5b9050602002013581526020019081526020015f20548152602001856001015f8a8a888181106106f5576106f461236d565b5b9050602002013581526020019081526020015f20548152602001828152508584815181106107265761072561236d565b5b602002602001018190525050508080600101915050610533565b505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b815260040161079591906123a9565b602060405180830381865afa1580156107b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d491906123ec565b61081557336040517f52d725f500000000000000000000000000000000000000000000000000000000815260040161080c91906123a9565b60405180910390fd5b835f61082082611427565b905073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663bff3aaba826040518263ffffffff1660e01b815260040161086f9190612426565b602060405180830381865afa15801561088a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ae91906123ec565b6108ef57806040517fb6679c3b0000000000000000000000000000000000000000000000000000000081526004016108e69190612426565b60405180910390fd5b5f6108f8611037565b9050806006015f8881526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156109995786336040517f1dd7250c00000000000000000000000000000000000000000000000000000000815260040161099092919061243f565b60405180910390fd5b5f878787876040516020016109b19493929190612466565b604051602081830303815290604052805190602001209050816004015f8281526020019081526020015f205f8154809291906109ec906124d6565b91905055506001826006015f8a81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550816007015f8281526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816003015f8981526020019081526020015f205f9054906101000a900460ff16158015610b0d5750610b0c826004015f8381526020019081526020015f2054611440565b5b15610beb5785826001015f8a81526020019081526020015f208190555084826002015f8a81526020019081526020015f208190555086825f015f8a81526020019081526020015f20819055506001826003015f8a81526020019081526020015f205f6101000a81548160ff02191690831515021790555080826005015f8a81526020019081526020015f2081905550877fcb89ccb347018d7f282bb4c048e135e19bc1d13660fa0f2850e10518422536de8787856007015f8681526020019081526020015f20604051610be2939291906125fd565b60405180910390a25b5050505050505050565b60605f610c00611037565b90508383905067ffffffffffffffff811115610c1f57610c1e611b4a565b5b604051908082528060200260200182016040528015610c5857816020015b610c45611971565b815260200190600190039081610c3d5790505b5091505f5b84849050811015610e6a57610c8a858583818110610c7e57610c7d61236d565b5b905060200201356102d7565b610ce457848482818110610ca157610ca061236d565b5b905060200201356040517f0666cbdf000000000000000000000000000000000000000000000000000000008152600401610cdb9190611cd7565b60405180910390fd5b5f826005015f878785818110610cfd57610cfc61236d565b5b9050602002013581526020019081526020015f205490505f836007015f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610da557602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610d5c575b505050505090506040518060800160405280888886818110610dca57610dc961236d565b5b905060200201358152602001855f015f8a8a88818110610ded57610dec61236d565b5b9050602002013581526020019081526020015f20548152602001856002015f8a8a88818110610e1f57610e1e61236d565b5b9050602002013581526020019081526020015f2054815260200182815250858481518110610e5057610e4f61236d565b5b602002602001018190525050508080600101915050610c5d565b505092915050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60605f610eb6611037565b90505f816005015f8581526020019081526020015f20549050816007015f8281526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610f5f57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f16575b505050505092505050919050565b60605f6001610f7b846114d1565b0190505f8167ffffffffffffffff811115610f9957610f98611b4a565b5b6040519080825280601f01601f191660200182016040528015610fcb5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561102c578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161102157611020612639565b5b0494505f8503610fd8575b819350505050919050565b5f7ff41c60ea5b83c8f19b663613ffdd3fa441a59933b8a4fdf4da891b38433d1a00905090565b5f611067611082565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061115657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661113d611622565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561118d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611210919061267a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461127f57336040517f0e56cf3d00000000000000000000000000000000000000000000000000000000815260040161127691906123a9565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156112ea57506040513d601f19601f820116820180604052508101906112e791906126b9565b60015b61132b57816040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161132291906123a9565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461139157806040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004016113889190611cd7565b60405180910390fd5b61139b8383611675565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611425576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f67ffffffffffffffff6010835f1c901c169050919050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16636799ef526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c391906126f8565b905080831015915050919050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061152d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161152357611522612639565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061156a576d04ee2d6d415b85acef810000000083816115605761155f612639565b5b0492506020810190505b662386f26fc10000831061159957662386f26fc10000838161158f5761158e612639565b5b0492506010810190505b6305f5e10083106115c2576305f5e10083816115b8576115b7612639565b5b0492506008810190505b61271083106115e75761271083816115dd576115dc612639565b5b0492506004810190505b6064831061160a5760648381611600576115ff612639565b5b0492506002810190505b600a8310611619576001810190505b80915050919050565b5f61164e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6116e7565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61167e826116f0565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156116da576116d482826117b9565b506116e3565b6116e2611839565b5b5050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361174b57806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161174291906123a9565b60405180910390fd5b806117777f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6116e7565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516117e29190612767565b5f60405180830381855af49150503d805f811461181a576040519150601f19603f3d011682016040523d82523d5f602084013e61181f565b606091505b509150915061182f858383611875565b9250505092915050565b5f341115611873576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60608261188a5761188582611902565b6118fa565b5f82511480156118b057505f8473ffffffffffffffffffffffffffffffffffffffff163b145b156118f257836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016118e991906123a9565b60405180910390fd5b8190506118fb565b5b9392505050565b5f815111156119145780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180608001604052805f80191681526020015f81526020015f8019168152602001606081525090565b60405180608001604052805f80191681526020015f81526020015f8019168152602001606081525090565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156119d35780820151818401526020810190506119b8565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6119f88261199c565b611a0281856119a6565b9350611a128185602086016119b6565b611a1b816119de565b840191505092915050565b5f6020820190508181035f830152611a3e81846119ee565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b611a6981611a57565b8114611a73575f80fd5b50565b5f81359050611a8481611a60565b92915050565b5f60208284031215611a9f57611a9e611a4f565b5b5f611aac84828501611a76565b91505092915050565b5f8115159050919050565b611ac981611ab5565b82525050565b5f602082019050611ae25f830184611ac0565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611b1182611ae8565b9050919050565b611b2181611b07565b8114611b2b575f80fd5b50565b5f81359050611b3c81611b18565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611b80826119de565b810181811067ffffffffffffffff82111715611b9f57611b9e611b4a565b5b80604052505050565b5f611bb1611a46565b9050611bbd8282611b77565b919050565b5f67ffffffffffffffff821115611bdc57611bdb611b4a565b5b611be5826119de565b9050602081019050919050565b828183375f83830152505050565b5f611c12611c0d84611bc2565b611ba8565b905082815260208101848484011115611c2e57611c2d611b46565b5b611c39848285611bf2565b509392505050565b5f82601f830112611c5557611c54611b42565b5b8135611c65848260208601611c00565b91505092915050565b5f8060408385031215611c8457611c83611a4f565b5b5f611c9185828601611b2e565b925050602083013567ffffffffffffffff811115611cb257611cb1611a53565b5b611cbe85828601611c41565b9150509250929050565b611cd181611a57565b82525050565b5f602082019050611cea5f830184611cc8565b92915050565b5f80fd5b5f80fd5b5f8083601f840112611d0d57611d0c611b42565b5b8235905067ffffffffffffffff811115611d2a57611d29611cf0565b5b602083019150836020820283011115611d4657611d45611cf4565b5b9250929050565b5f8060208385031215611d6357611d62611a4f565b5b5f83013567ffffffffffffffff811115611d8057611d7f611a53565b5b611d8c85828601611cf8565b92509250509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611dca81611a57565b82525050565b5f819050919050565b611de281611dd0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611e1a81611b07565b82525050565b5f611e2b8383611e11565b60208301905092915050565b5f602082019050919050565b5f611e4d82611de8565b611e578185611df2565b9350611e6283611e02565b805f5b83811015611e92578151611e798882611e20565b9750611e8483611e37565b925050600181019050611e65565b5085935050505092915050565b5f608083015f830151611eb45f860182611dc1565b506020830151611ec76020860182611dd9565b506040830151611eda6040860182611dc1565b5060608301518482036060860152611ef28282611e43565b9150508091505092915050565b5f611f0a8383611e9f565b905092915050565b5f602082019050919050565b5f611f2882611d98565b611f328185611da2565b935083602082028501611f4485611db2565b805f5b85811015611f7f5784840389528151611f608582611eff565b9450611f6b83611f12565b925060208a01995050600181019050611f47565b50829750879550505050505092915050565b5f6020820190508181035f830152611fa98184611f1e565b905092915050565b611fba81611dd0565b8114611fc4575f80fd5b50565b5f81359050611fd581611fb1565b92915050565b5f805f8060808587031215611ff357611ff2611a4f565b5b5f61200087828801611a76565b945050602061201187828801611fc7565b935050604061202287828801611a76565b925050606061203387828801611a76565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f608083015f83015161207d5f860182611dc1565b5060208301516120906020860182611dd9565b5060408301516120a36040860182611dc1565b50606083015184820360608601526120bb8282611e43565b9150508091505092915050565b5f6120d38383612068565b905092915050565b5f602082019050919050565b5f6120f18261203f565b6120fb8185612049565b93508360208202850161210d85612059565b805f5b85811015612148578484038952815161212985826120c8565b9450612134836120db565b925060208a01995050600181019050612110565b50829750879550505050505092915050565b5f6020820190508181035f83015261217281846120e7565b905092915050565b5f82825260208201905092915050565b5f61219482611de8565b61219e818561217a565b93506121a983611e02565b805f5b838110156121d95781516121c08882611e20565b97506121cb83611e37565b9250506001810190506121ac565b5085935050505092915050565b5f6020820190508181035f8301526121fe818461218a565b905092915050565b5f81905092915050565b5f61221a8261199c565b6122248185612206565b93506122348185602086016119b6565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f612274600283612206565b915061227f82612240565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6122be600183612206565b91506122c98261228a565b600182019050919050565b5f6122df8287612210565b91506122ea82612268565b91506122f68286612210565b9150612301826122b2565b915061230d8285612210565b9150612318826122b2565b91506123248284612210565b915081905095945050505050565b5f67ffffffffffffffff82169050919050565b61234e81612332565b82525050565b5f6020820190506123675f830184612345565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6123a381611b07565b82525050565b5f6020820190506123bc5f83018461239a565b92915050565b6123cb81611ab5565b81146123d5575f80fd5b50565b5f815190506123e6816123c2565b92915050565b5f6020828403121561240157612400611a4f565b5b5f61240e848285016123d8565b91505092915050565b61242081611dd0565b82525050565b5f6020820190506124395f830184612417565b92915050565b5f6040820190506124525f830185611cc8565b61245f602083018461239a565b9392505050565b5f6080820190506124795f830187611cc8565b6124866020830186612417565b6124936040830185611cc8565b6124a06060830184611cc8565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6124e082611dd0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612512576125116124a9565b5b600182019050919050565b5f81549050919050565b5f819050815f5260205f209050919050565b5f815f1c9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61257561257083612539565b612544565b9050919050565b5f6125878254612563565b9050919050565b5f600182019050919050565b5f6125a48261251d565b6125ae818561217a565b93506125b983612527565b805f5b838110156125f0576125cd8261257c565b6125d78882611e20565b97506125e28361258e565b9250506001810190506125bc565b5085935050505092915050565b5f6060820190506126105f830186611cc8565b61261d6020830185611cc8565b818103604083015261262f818461259a565b9050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8151905061267481611b18565b92915050565b5f6020828403121561268f5761268e611a4f565b5b5f61269c84828501612666565b91505092915050565b5f815190506126b381611a60565b92915050565b5f602082840312156126ce576126cd611a4f565b5b5f6126db848285016126a5565b91505092915050565b5f815190506126f281611fb1565b92915050565b5f6020828403121561270d5761270c611a4f565b5b5f61271a848285016126e4565b91505092915050565b5f81519050919050565b5f81905092915050565b5f61274182612723565b61274b818561272d565b935061275b8185602086016119b6565b80840191505092915050565b5f6127728284612737565b91508190509291505056 + ///0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801562000043575f80fd5b50620000546200005a60201b60201c565b620001c4565b5f6200006b6200015e60201b60201c565b9050805f0160089054906101000a900460ff1615620000b6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146200015b5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051620001529190620001a9565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b620001a38162000185565b82525050565b5f602082019050620001be5f83018462000198565b92915050565b6080516127b1620001eb5f395f81816110df0152818161113401526113d601526127b15ff3fe608060405260043610610090575f3560e01c806355c4d9971161005857806355c4d9971461015657806390f3035414610192578063a14f8971146101ba578063ad3cb1cc146101f6578063e6f6ab941461022057610090565b80630d8e6e2c146100945780632ddc9a6f146100be57806339f73810146100fa5780634f1ef2861461011057806352d1902d1461012c575b5f80fd5b34801561009f575f80fd5b506100a861025c565b6040516100b59190611a5a565b60405180910390f35b3480156100c9575f80fd5b506100e460048036038101906100df9190611abe565b6102d7565b6040516100f19190611b03565b60405180910390f35b348015610105575f80fd5b5061010e61030b565b005b61012a60048036038101906101259190611ca2565b61047b565b005b348015610137575f80fd5b5061014061049a565b60405161014d9190611d0b565b60405180910390f35b348015610161575f80fd5b5061017c60048036038101906101779190611d81565b6104cb565b6040516101899190611fc5565b60405180910390f35b34801561019d575f80fd5b506101b860048036038101906101b3919061200f565b610748565b005b3480156101c5575f80fd5b506101e060048036038101906101db9190611d81565b610c29565b6040516101ed919061218e565b60405180910390f35b348015610201575f80fd5b5061020a610ea6565b6040516102179190611a5a565b60405180910390f35b34801561022b575f80fd5b5061024660048036038101906102419190611abe565b610edf565b604051610253919061221a565b60405180910390f35b60606040518060400160405280601181526020017f43697068657274657874436f6d6d69747300000000000000000000000000000081525061029d5f610fa1565b6102a76001610fa1565b6102b05f610fa1565b6040516020016102c39493929190612308565b604051602081830303815290604052905090565b5f806102e161106b565b9050806003015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b6001610315611092565b67ffffffffffffffff1614610356576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f6103616110b6565b9050805f0160089054906101000a900460ff16806103a957508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b156103e0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff0219169083151502179055505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d28260405161046f9190612388565b60405180910390a15050565b6104836110dd565b61048c826111c3565b61049682826112b6565b5050565b5f6104a36113d4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b60605f6104d661106b565b90508383905067ffffffffffffffff8111156104f5576104f4611b7e565b5b60405190808252806020026020018201604052801561052e57816020015b61051b61197a565b8152602001906001900390816105135790505b5091505f5b8484905081101561074057610560858583818110610554576105536123a1565b5b905060200201356102d7565b6105ba57848482818110610577576105766123a1565b5b905060200201356040517f0666cbdf0000000000000000000000000000000000000000000000000000000081526004016105b19190611d0b565b60405180910390fd5b5f826005015f8787858181106105d3576105d26123a1565b5b9050602002013581526020019081526020015f205490505f836007015f8381526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561067b57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610632575b5050505050905060405180608001604052808888868181106106a05761069f6123a1565b5b905060200201358152602001855f015f8a8a888181106106c3576106c26123a1565b5b9050602002013581526020019081526020015f20548152602001856001015f8a8a888181106106f5576106f46123a1565b5b9050602002013581526020019081526020015f2054815260200182815250858481518110610726576107256123a1565b5b602002602001018190525050508080600101915050610533565b505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b815260040161079591906123dd565b602060405180830381865afa1580156107b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d49190612420565b61081557336040517f52d725f500000000000000000000000000000000000000000000000000000000815260040161080c91906123dd565b60405180910390fd5b835f6108208261145b565b905073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663bff3aaba826040518263ffffffff1660e01b815260040161086f919061245a565b602060405180830381865afa15801561088a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ae9190612420565b6108ef57806040517fb6679c3b0000000000000000000000000000000000000000000000000000000081526004016108e6919061245a565b60405180910390fd5b5f6108f861106b565b9050806006015f8881526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156109995786336040517f1dd7250c000000000000000000000000000000000000000000000000000000008152600401610990929190612473565b60405180910390fd5b5f878787876040516020016109b1949392919061249a565b604051602081830303815290604052805190602001209050816004015f8281526020019081526020015f205f8154809291906109ec9061250a565b91905055505f826008015f8381526020019081526020015f205403610a25576001826008015f8381526020019081526020015f20819055505b6001826006015f8a81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550816007015f8281526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816003015f8981526020019081526020015f205f9054906101000a900460ff16158015610b415750610b40826004015f8381526020019081526020015f2054611474565b5b15610c1f5785826001015f8a81526020019081526020015f208190555084826002015f8a81526020019081526020015f208190555086825f015f8a81526020019081526020015f20819055506001826003015f8a81526020019081526020015f205f6101000a81548160ff02191690831515021790555080826005015f8a81526020019081526020015f2081905550877fcb89ccb347018d7f282bb4c048e135e19bc1d13660fa0f2850e10518422536de8787856007015f8681526020019081526020015f20604051610c1693929190612631565b60405180910390a25b5050505050505050565b60605f610c3461106b565b90508383905067ffffffffffffffff811115610c5357610c52611b7e565b5b604051908082528060200260200182016040528015610c8c57816020015b610c796119a5565b815260200190600190039081610c715790505b5091505f5b84849050811015610e9e57610cbe858583818110610cb257610cb16123a1565b5b905060200201356102d7565b610d1857848482818110610cd557610cd46123a1565b5b905060200201356040517f0666cbdf000000000000000000000000000000000000000000000000000000008152600401610d0f9190611d0b565b60405180910390fd5b5f826005015f878785818110610d3157610d306123a1565b5b9050602002013581526020019081526020015f205490505f836007015f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610dd957602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610d90575b505050505090506040518060800160405280888886818110610dfe57610dfd6123a1565b5b905060200201358152602001855f015f8a8a88818110610e2157610e206123a1565b5b9050602002013581526020019081526020015f20548152602001856002015f8a8a88818110610e5357610e526123a1565b5b9050602002013581526020019081526020015f2054815260200182815250858481518110610e8457610e836123a1565b5b602002602001018190525050508080600101915050610c91565b505092915050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60605f610eea61106b565b90505f816005015f8581526020019081526020015f20549050816007015f8281526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610f9357602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f4a575b505050505092505050919050565b60605f6001610faf84611505565b0190505f8167ffffffffffffffff811115610fcd57610fcc611b7e565b5b6040519080825280601f01601f191660200182016040528015610fff5781602001600182028036833780820191505090505b5090505f82602001820190505b600115611060578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816110555761105461266d565b5b0494505f850361100c575b819350505050919050565b5f7ff41c60ea5b83c8f19b663613ffdd3fa441a59933b8a4fdf4da891b38433d1a00905090565b5f61109b6110b6565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061118a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611171611656565b73ffffffffffffffffffffffffffffffffffffffff1614155b156111c1576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611220573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124491906126ae565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112b357336040517f0e56cf3d0000000000000000000000000000000000000000000000000000000081526004016112aa91906123dd565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561131e57506040513d601f19601f8201168201806040525081019061131b91906126ed565b60015b61135f57816040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161135691906123dd565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b81146113c557806040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004016113bc9190611d0b565b60405180910390fd5b6113cf83836116a9565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611459576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f67ffffffffffffffff6010835f1c901c169050919050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16636799ef526040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f7919061272c565b905080831015915050919050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611561577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816115575761155661266d565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061159e576d04ee2d6d415b85acef810000000083816115945761159361266d565b5b0492506020810190505b662386f26fc1000083106115cd57662386f26fc1000083816115c3576115c261266d565b5b0492506010810190505b6305f5e10083106115f6576305f5e10083816115ec576115eb61266d565b5b0492506008810190505b612710831061161b5761271083816116115761161061266d565b5b0492506004810190505b6064831061163e57606483816116345761163361266d565b5b0492506002810190505b600a831061164d576001810190505b80915050919050565b5f6116827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b61171b565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116b282611724565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f8151111561170e5761170882826117ed565b50611717565b61171661186d565b5b5050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361177f57806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161177691906123dd565b60405180910390fd5b806117ab7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b61171b565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff1684604051611816919061279b565b5f60405180830381855af49150503d805f811461184e576040519150601f19603f3d011682016040523d82523d5f602084013e611853565b606091505b50915091506118638583836118a9565b9250505092915050565b5f3411156118a7576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060826118be576118b982611936565b61192e565b5f82511480156118e457505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561192657836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161191d91906123dd565b60405180910390fd5b81905061192f565b5b9392505050565b5f815111156119485780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180608001604052805f80191681526020015f81526020015f8019168152602001606081525090565b60405180608001604052805f80191681526020015f81526020015f8019168152602001606081525090565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611a075780820151818401526020810190506119ec565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611a2c826119d0565b611a3681856119da565b9350611a468185602086016119ea565b611a4f81611a12565b840191505092915050565b5f6020820190508181035f830152611a728184611a22565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b611a9d81611a8b565b8114611aa7575f80fd5b50565b5f81359050611ab881611a94565b92915050565b5f60208284031215611ad357611ad2611a83565b5b5f611ae084828501611aaa565b91505092915050565b5f8115159050919050565b611afd81611ae9565b82525050565b5f602082019050611b165f830184611af4565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611b4582611b1c565b9050919050565b611b5581611b3b565b8114611b5f575f80fd5b50565b5f81359050611b7081611b4c565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611bb482611a12565b810181811067ffffffffffffffff82111715611bd357611bd2611b7e565b5b80604052505050565b5f611be5611a7a565b9050611bf18282611bab565b919050565b5f67ffffffffffffffff821115611c1057611c0f611b7e565b5b611c1982611a12565b9050602081019050919050565b828183375f83830152505050565b5f611c46611c4184611bf6565b611bdc565b905082815260208101848484011115611c6257611c61611b7a565b5b611c6d848285611c26565b509392505050565b5f82601f830112611c8957611c88611b76565b5b8135611c99848260208601611c34565b91505092915050565b5f8060408385031215611cb857611cb7611a83565b5b5f611cc585828601611b62565b925050602083013567ffffffffffffffff811115611ce657611ce5611a87565b5b611cf285828601611c75565b9150509250929050565b611d0581611a8b565b82525050565b5f602082019050611d1e5f830184611cfc565b92915050565b5f80fd5b5f80fd5b5f8083601f840112611d4157611d40611b76565b5b8235905067ffffffffffffffff811115611d5e57611d5d611d24565b5b602083019150836020820283011115611d7a57611d79611d28565b5b9250929050565b5f8060208385031215611d9757611d96611a83565b5b5f83013567ffffffffffffffff811115611db457611db3611a87565b5b611dc085828601611d2c565b92509250509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611dfe81611a8b565b82525050565b5f819050919050565b611e1681611e04565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611e4e81611b3b565b82525050565b5f611e5f8383611e45565b60208301905092915050565b5f602082019050919050565b5f611e8182611e1c565b611e8b8185611e26565b9350611e9683611e36565b805f5b83811015611ec6578151611ead8882611e54565b9750611eb883611e6b565b925050600181019050611e99565b5085935050505092915050565b5f608083015f830151611ee85f860182611df5565b506020830151611efb6020860182611e0d565b506040830151611f0e6040860182611df5565b5060608301518482036060860152611f268282611e77565b9150508091505092915050565b5f611f3e8383611ed3565b905092915050565b5f602082019050919050565b5f611f5c82611dcc565b611f668185611dd6565b935083602082028501611f7885611de6565b805f5b85811015611fb35784840389528151611f948582611f33565b9450611f9f83611f46565b925060208a01995050600181019050611f7b565b50829750879550505050505092915050565b5f6020820190508181035f830152611fdd8184611f52565b905092915050565b611fee81611e04565b8114611ff8575f80fd5b50565b5f8135905061200981611fe5565b92915050565b5f805f806080858703121561202757612026611a83565b5b5f61203487828801611aaa565b945050602061204587828801611ffb565b935050604061205687828801611aaa565b925050606061206787828801611aaa565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f608083015f8301516120b15f860182611df5565b5060208301516120c46020860182611e0d565b5060408301516120d76040860182611df5565b50606083015184820360608601526120ef8282611e77565b9150508091505092915050565b5f612107838361209c565b905092915050565b5f602082019050919050565b5f61212582612073565b61212f818561207d565b9350836020820285016121418561208d565b805f5b8581101561217c578484038952815161215d85826120fc565b94506121688361210f565b925060208a01995050600181019050612144565b50829750879550505050505092915050565b5f6020820190508181035f8301526121a6818461211b565b905092915050565b5f82825260208201905092915050565b5f6121c882611e1c565b6121d281856121ae565b93506121dd83611e36565b805f5b8381101561220d5781516121f48882611e54565b97506121ff83611e6b565b9250506001810190506121e0565b5085935050505092915050565b5f6020820190508181035f83015261223281846121be565b905092915050565b5f81905092915050565b5f61224e826119d0565b612258818561223a565b93506122688185602086016119ea565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f6122a860028361223a565b91506122b382612274565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6122f260018361223a565b91506122fd826122be565b600182019050919050565b5f6123138287612244565b915061231e8261229c565b915061232a8286612244565b9150612335826122e6565b91506123418285612244565b915061234c826122e6565b91506123588284612244565b915081905095945050505050565b5f67ffffffffffffffff82169050919050565b61238281612366565b82525050565b5f60208201905061239b5f830184612379565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6123d781611b3b565b82525050565b5f6020820190506123f05f8301846123ce565b92915050565b6123ff81611ae9565b8114612409575f80fd5b50565b5f8151905061241a816123f6565b92915050565b5f6020828403121561243557612434611a83565b5b5f6124428482850161240c565b91505092915050565b61245481611e04565b82525050565b5f60208201905061246d5f83018461244b565b92915050565b5f6040820190506124865f830185611cfc565b61249360208301846123ce565b9392505050565b5f6080820190506124ad5f830187611cfc565b6124ba602083018661244b565b6124c76040830185611cfc565b6124d46060830184611cfc565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61251482611e04565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612546576125456124dd565b5b600182019050919050565b5f81549050919050565b5f819050815f5260205f209050919050565b5f815f1c9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6125a96125a48361256d565b612578565b9050919050565b5f6125bb8254612597565b9050919050565b5f600182019050919050565b5f6125d882612551565b6125e281856121ae565b93506125ed8361255b565b805f5b8381101561262457612601826125b0565b61260b8882611e54565b9750612616836125c2565b9250506001810190506125f0565b5085935050505092915050565b5f6060820190506126445f830186611cfc565b6126516020830185611cfc565b818103604083015261266381846125ce565b9050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f815190506126a881611b4c565b92915050565b5f602082840312156126c3576126c2611a83565b5b5f6126d08482850161269a565b91505092915050565b5f815190506126e781611a94565b92915050565b5f6020828403121561270257612701611a83565b5b5f61270f848285016126d9565b91505092915050565b5f8151905061272681611fe5565b92915050565b5f6020828403121561274157612740611a83565b5b5f61274e84828501612718565b91505092915050565b5f81519050919050565b5f81905092915050565b5f61277582612757565b61277f8185612761565b935061278f8185602086016119ea565b80840191505092915050565b5f6127a6828461276b565b91508190509291505056 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\xA0`@R0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RP4\x80\x15b\0\0CW_\x80\xFD[Pb\0\0Tb\0\0Z` \x1B` \x1CV[b\0\x01\xC4V[_b\0\0kb\0\x01^` \x1B` \x1CV[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15b\0\0\xB6W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14b\0\x01[Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Qb\0\x01R\x91\x90b\0\x01\xA9V[`@Q\x80\x91\x03\x90\xA1[PV[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[b\0\x01\xA3\x81b\0\x01\x85V[\x82RPPV[_` \x82\x01\x90Pb\0\x01\xBE_\x83\x01\x84b\0\x01\x98V[\x92\x91PPV[`\x80Qa'}b\0\x01\xEB_9_\x81\x81a\x10\xAB\x01R\x81\x81a\x11\0\x01Ra\x13\xA2\x01Ra'}_\xF3\xFE`\x80`@R`\x046\x10a\0\x90W_5`\xE0\x1C\x80cU\xC4\xD9\x97\x11a\0XW\x80cU\xC4\xD9\x97\x14a\x01VW\x80c\x90\xF3\x03T\x14a\x01\x92W\x80c\xA1O\x89q\x14a\x01\xBAW\x80c\xAD<\xB1\xCC\x14a\x01\xF6W\x80c\xE6\xF6\xAB\x94\x14a\x02 Wa\0\x90V[\x80c\r\x8En,\x14a\0\x94W\x80c-\xDC\x9Ao\x14a\0\xBEW\x80c9\xF78\x10\x14a\0\xFAW\x80cO\x1E\xF2\x86\x14a\x01\x10W\x80cR\xD1\x90-\x14a\x01,W[_\x80\xFD[4\x80\x15a\0\x9FW_\x80\xFD[Pa\0\xA8a\x02\\V[`@Qa\0\xB5\x91\x90a\x1A&V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\0\xC9W_\x80\xFD[Pa\0\xE4`\x04\x806\x03\x81\x01\x90a\0\xDF\x91\x90a\x1A\x8AV[a\x02\xD7V[`@Qa\0\xF1\x91\x90a\x1A\xCFV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x05W_\x80\xFD[Pa\x01\x0Ea\x03\x0BV[\0[a\x01*`\x04\x806\x03\x81\x01\x90a\x01%\x91\x90a\x1CnV[a\x04{V[\0[4\x80\x15a\x017W_\x80\xFD[Pa\x01@a\x04\x9AV[`@Qa\x01M\x91\x90a\x1C\xD7V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01aW_\x80\xFD[Pa\x01|`\x04\x806\x03\x81\x01\x90a\x01w\x91\x90a\x1DMV[a\x04\xCBV[`@Qa\x01\x89\x91\x90a\x1F\x91V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x9DW_\x80\xFD[Pa\x01\xB8`\x04\x806\x03\x81\x01\x90a\x01\xB3\x91\x90a\x1F\xDBV[a\x07HV[\0[4\x80\x15a\x01\xC5W_\x80\xFD[Pa\x01\xE0`\x04\x806\x03\x81\x01\x90a\x01\xDB\x91\x90a\x1DMV[a\x0B\xF5V[`@Qa\x01\xED\x91\x90a!ZV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\x01W_\x80\xFD[Pa\x02\na\x0ErV[`@Qa\x02\x17\x91\x90a\x1A&V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02+W_\x80\xFD[Pa\x02F`\x04\x806\x03\x81\x01\x90a\x02A\x91\x90a\x1A\x8AV[a\x0E\xABV[`@Qa\x02S\x91\x90a!\xE6V[`@Q\x80\x91\x03\x90\xF3[```@Q\x80`@\x01`@R\x80`\x11\x81R` \x01\x7FCiphertextCommits\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RPa\x02\x9D_a\x0FmV[a\x02\xA7`\x01a\x0FmV[a\x02\xB0_a\x0FmV[`@Q` \x01a\x02\xC3\x94\x93\x92\x91\x90a\"\xD4V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x90V[_\x80a\x02\xE1a\x107V[\x90P\x80`\x03\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[`\x01a\x03\x15a\x10^V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x03VW`@Q\x7FoOs\x1F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02_a\x03aa\x10\x82V[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x80a\x03\xA9WP\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x15[\x15a\x03\xE0W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`\x01\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x82`@Qa\x04o\x91\x90a#TV[`@Q\x80\x91\x03\x90\xA1PPV[a\x04\x83a\x10\xA9V[a\x04\x8C\x82a\x11\x8FV[a\x04\x96\x82\x82a\x12\x82V[PPV[_a\x04\xA3a\x13\xA0V[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[``_a\x04\xD6a\x107V[\x90P\x83\x83\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x04\xF5Wa\x04\xF4a\x1BJV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x05.W\x81` \x01[a\x05\x1Ba\x19FV[\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x05\x13W\x90P[P\x91P_[\x84\x84\x90P\x81\x10\x15a\x07@Wa\x05`\x85\x85\x83\x81\x81\x10a\x05TWa\x05Sa#mV[[\x90P` \x02\x015a\x02\xD7V[a\x05\xBAW\x84\x84\x82\x81\x81\x10a\x05wWa\x05va#mV[[\x90P` \x02\x015`@Q\x7F\x06f\xCB\xDF\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\x81R`\x04\x01a\x05\xB1\x91\x90a\x1C\xD7V[`@Q\x80\x91\x03\x90\xFD[_\x82`\x05\x01_\x87\x87\x85\x81\x81\x10a\x05\xD3Wa\x05\xD2a#mV[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x90P_\x83`\x07\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x06{W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x062W[PPPPP\x90P`@Q\x80`\x80\x01`@R\x80\x88\x88\x86\x81\x81\x10a\x06\xA0Wa\x06\x9Fa#mV[[\x90P` \x02\x015\x81R` \x01\x85_\x01_\x8A\x8A\x88\x81\x81\x10a\x06\xC3Wa\x06\xC2a#mV[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x81R` \x01\x85`\x01\x01_\x8A\x8A\x88\x81\x81\x10a\x06\xF5Wa\x06\xF4a#mV[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x81R` \x01\x82\x81RP\x85\x84\x81Q\x81\x10a\x07&Wa\x07%a#mV[[` \x02` \x01\x01\x81\x90RPPP\x80\x80`\x01\x01\x91PPa\x053V[PP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x07\x95\x91\x90a#\xA9V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\xB0W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xD4\x91\x90a#\xECV[a\x08\x15W3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x08\x0C\x91\x90a#\xA9V[`@Q\x80\x91\x03\x90\xFD[\x83_a\x08 \x82a\x14'V[\x90Ps\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xBF\xF3\xAA\xBA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x08o\x91\x90a$&V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x08\x8AW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08\xAE\x91\x90a#\xECV[a\x08\xEFW\x80`@Q\x7F\xB6g\x9C;\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\x81R`\x04\x01a\x08\xE6\x91\x90a$&V[`@Q\x80\x91\x03\x90\xFD[_a\x08\xF8a\x107V[\x90P\x80`\x06\x01_\x88\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\t\x99W\x863`@Q\x7F\x1D\xD7%\x0C\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\x81R`\x04\x01a\t\x90\x92\x91\x90a$?V[`@Q\x80\x91\x03\x90\xFD[_\x87\x87\x87\x87`@Q` \x01a\t\xB1\x94\x93\x92\x91\x90a$fV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x81`\x04\x01_\x82\x81R` \x01\x90\x81R` \x01_ _\x81T\x80\x92\x91\x90a\t\xEC\x90a$\xD6V[\x91\x90PUP`\x01\x82`\x06\x01_\x8A\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x81`\x07\x01_\x82\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x81`\x03\x01_\x89\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x0B\rWPa\x0B\x0C\x82`\x04\x01_\x83\x81R` \x01\x90\x81R` \x01_ Ta\x14@V[[\x15a\x0B\xEBW\x85\x82`\x01\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x84\x82`\x02\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x86\x82_\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x81\x90UP`\x01\x82`\x03\x01_\x8A\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x80\x82`\x05\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x87\x7F\xCB\x89\xCC\xB3G\x01\x8D\x7F(+\xB4\xC0H\xE15\xE1\x9B\xC1\xD16`\xFA\x0F(P\xE1\x05\x18B%6\xDE\x87\x87\x85`\x07\x01_\x86\x81R` \x01\x90\x81R` \x01_ `@Qa\x0B\xE2\x93\x92\x91\x90a%\xFDV[`@Q\x80\x91\x03\x90\xA2[PPPPPPPPV[``_a\x0C\0a\x107V[\x90P\x83\x83\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0C\x1FWa\x0C\x1Ea\x1BJV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x0CXW\x81` \x01[a\x0CEa\x19qV[\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x0C=W\x90P[P\x91P_[\x84\x84\x90P\x81\x10\x15a\x0EjWa\x0C\x8A\x85\x85\x83\x81\x81\x10a\x0C~Wa\x0C}a#mV[[\x90P` \x02\x015a\x02\xD7V[a\x0C\xE4W\x84\x84\x82\x81\x81\x10a\x0C\xA1Wa\x0C\xA0a#mV[[\x90P` \x02\x015`@Q\x7F\x06f\xCB\xDF\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\x81R`\x04\x01a\x0C\xDB\x91\x90a\x1C\xD7V[`@Q\x80\x91\x03\x90\xFD[_\x82`\x05\x01_\x87\x87\x85\x81\x81\x10a\x0C\xFDWa\x0C\xFCa#mV[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x90P_\x83`\x07\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\r\xA5W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\r\\W[PPPPP\x90P`@Q\x80`\x80\x01`@R\x80\x88\x88\x86\x81\x81\x10a\r\xCAWa\r\xC9a#mV[[\x90P` \x02\x015\x81R` \x01\x85_\x01_\x8A\x8A\x88\x81\x81\x10a\r\xEDWa\r\xECa#mV[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x81R` \x01\x85`\x02\x01_\x8A\x8A\x88\x81\x81\x10a\x0E\x1FWa\x0E\x1Ea#mV[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x81R` \x01\x82\x81RP\x85\x84\x81Q\x81\x10a\x0EPWa\x0EOa#mV[[` \x02` \x01\x01\x81\x90RPPP\x80\x80`\x01\x01\x91PPa\x0C]V[PP\x92\x91PPV[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[``_a\x0E\xB6a\x107V[\x90P_\x81`\x05\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x07\x01_\x82\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x0F_W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x0F\x16W[PPPPP\x92PPP\x91\x90PV[``_`\x01a\x0F{\x84a\x14\xD1V[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0F\x99Wa\x0F\x98a\x1BJV[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0F\xCBW\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a\x10,W\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a\x10!Wa\x10 a&9V[[\x04\x94P_\x85\x03a\x0F\xD8W[\x81\x93PPPP\x91\x90PV[_\x7F\xF4\x1C`\xEA[\x83\xC8\xF1\x9Bf6\x13\xFF\xDD?\xA4A\xA5\x993\xB8\xA4\xFD\xF4\xDA\x89\x1B8C=\x1A\0\x90P\x90V[_a\x10ga\x10\x82V[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a\x11VWP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x11=a\x16\"V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x11\x8DW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11\xECW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x12\x10\x91\x90a&zV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x12\x7FW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\x12v\x91\x90a#\xA9V[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a\x12\xEAWP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x12\xE7\x91\x90a&\xB9V[`\x01[a\x13+W\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x13\"\x91\x90a#\xA9V[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a\x13\x91W\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a\x13\x88\x91\x90a\x1C\xD7V[`@Q\x80\x91\x03\x90\xFD[a\x13\x9B\x83\x83a\x16uV[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x14%W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x10\x83_\x1C\x90\x1C\x16\x90P\x91\x90PV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cg\x99\xEFR`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x14\x9FW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x14\xC3\x91\x90a&\xF8V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a\x15-Wz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a\x15#Wa\x15\"a&9V[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x15jWm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a\x15`Wa\x15_a&9V[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a\x15\x99Wf#\x86\xF2o\xC1\0\0\x83\x81a\x15\x8FWa\x15\x8Ea&9V[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a\x15\xC2Wc\x05\xF5\xE1\0\x83\x81a\x15\xB8Wa\x15\xB7a&9V[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a\x15\xE7Wa'\x10\x83\x81a\x15\xDDWa\x15\xDCa&9V[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a\x16\nW`d\x83\x81a\x16\0Wa\x15\xFFa&9V[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a\x16\x19W`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[_a\x16N\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba\x16\xE7V[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a\x16~\x82a\x16\xF0V[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a\x16\xDAWa\x16\xD4\x82\x82a\x17\xB9V[Pa\x16\xE3V[a\x16\xE2a\x189V[[PPV[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a\x17KW\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x17B\x91\x90a#\xA9V[`@Q\x80\x91\x03\x90\xFD[\x80a\x17w\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba\x16\xE7V[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa\x17\xE2\x91\x90a'gV[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a\x18\x1AW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a\x18\x1FV[``\x91P[P\x91P\x91Pa\x18/\x85\x83\x83a\x18uV[\x92PPP\x92\x91PPV[_4\x11\x15a\x18sW`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[``\x82a\x18\x8AWa\x18\x85\x82a\x19\x02V[a\x18\xFAV[_\x82Q\x14\x80\x15a\x18\xB0WP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a\x18\xF2W\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a\x18\xE9\x91\x90a#\xA9V[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa\x18\xFBV[[\x93\x92PPPV[_\x81Q\x11\x15a\x19\x14W\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x80`\x80\x01`@R\x80_\x80\x19\x16\x81R` \x01_\x81R` \x01_\x80\x19\x16\x81R` \x01``\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80_\x80\x19\x16\x81R` \x01_\x81R` \x01_\x80\x19\x16\x81R` \x01``\x81RP\x90V[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15a\x19\xD3W\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa\x19\xB8V[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a\x19\xF8\x82a\x19\x9CV[a\x1A\x02\x81\x85a\x19\xA6V[\x93Pa\x1A\x12\x81\x85` \x86\x01a\x19\xB6V[a\x1A\x1B\x81a\x19\xDEV[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x1A>\x81\x84a\x19\xEEV[\x90P\x92\x91PPV[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[a\x1Ai\x81a\x1AWV[\x81\x14a\x1AsW_\x80\xFD[PV[_\x815\x90Pa\x1A\x84\x81a\x1A`V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x1A\x9FWa\x1A\x9Ea\x1AOV[[_a\x1A\xAC\x84\x82\x85\x01a\x1AvV[\x91PP\x92\x91PPV[_\x81\x15\x15\x90P\x91\x90PV[a\x1A\xC9\x81a\x1A\xB5V[\x82RPPV[_` \x82\x01\x90Pa\x1A\xE2_\x83\x01\x84a\x1A\xC0V[\x92\x91PPV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a\x1B\x11\x82a\x1A\xE8V[\x90P\x91\x90PV[a\x1B!\x81a\x1B\x07V[\x81\x14a\x1B+W_\x80\xFD[PV[_\x815\x90Pa\x1B<\x81a\x1B\x18V[\x92\x91PPV[_\x80\xFD[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[a\x1B\x80\x82a\x19\xDEV[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1B\x9FWa\x1B\x9Ea\x1BJV[[\x80`@RPPPV[_a\x1B\xB1a\x1AFV[\x90Pa\x1B\xBD\x82\x82a\x1BwV[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a\x1B\xDCWa\x1B\xDBa\x1BJV[[a\x1B\xE5\x82a\x19\xDEV[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_a\x1C\x12a\x1C\r\x84a\x1B\xC2V[a\x1B\xA8V[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15a\x1C.Wa\x1C-a\x1BFV[[a\x1C9\x84\x82\x85a\x1B\xF2V[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12a\x1CUWa\x1CTa\x1BBV[[\x815a\x1Ce\x84\x82` \x86\x01a\x1C\0V[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a\x1C\x84Wa\x1C\x83a\x1AOV[[_a\x1C\x91\x85\x82\x86\x01a\x1B.V[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1C\xB2Wa\x1C\xB1a\x1ASV[[a\x1C\xBE\x85\x82\x86\x01a\x1CAV[\x91PP\x92P\x92\x90PV[a\x1C\xD1\x81a\x1AWV[\x82RPPV[_` \x82\x01\x90Pa\x1C\xEA_\x83\x01\x84a\x1C\xC8V[\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12a\x1D\rWa\x1D\x0Ca\x1BBV[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1D*Wa\x1D)a\x1C\xF0V[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15a\x1DFWa\x1DEa\x1C\xF4V[[\x92P\x92\x90PV[_\x80` \x83\x85\x03\x12\x15a\x1DcWa\x1Dba\x1AOV[[_\x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1D\x80Wa\x1D\x7Fa\x1ASV[[a\x1D\x8C\x85\x82\x86\x01a\x1C\xF8V[\x92P\x92PP\x92P\x92\x90PV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a\x1D\xCA\x81a\x1AWV[\x82RPPV[_\x81\x90P\x91\x90PV[a\x1D\xE2\x81a\x1D\xD0V[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a\x1E\x1A\x81a\x1B\x07V[\x82RPPV[_a\x1E+\x83\x83a\x1E\x11V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a\x1EM\x82a\x1D\xE8V[a\x1EW\x81\x85a\x1D\xF2V[\x93Pa\x1Eb\x83a\x1E\x02V[\x80_[\x83\x81\x10\x15a\x1E\x92W\x81Qa\x1Ey\x88\x82a\x1E V[\x97Pa\x1E\x84\x83a\x1E7V[\x92PP`\x01\x81\x01\x90Pa\x1EeV[P\x85\x93PPPP\x92\x91PPV[_`\x80\x83\x01_\x83\x01Qa\x1E\xB4_\x86\x01\x82a\x1D\xC1V[P` \x83\x01Qa\x1E\xC7` \x86\x01\x82a\x1D\xD9V[P`@\x83\x01Qa\x1E\xDA`@\x86\x01\x82a\x1D\xC1V[P``\x83\x01Q\x84\x82\x03``\x86\x01Ra\x1E\xF2\x82\x82a\x1ECV[\x91PP\x80\x91PP\x92\x91PPV[_a\x1F\n\x83\x83a\x1E\x9FV[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a\x1F(\x82a\x1D\x98V[a\x1F2\x81\x85a\x1D\xA2V[\x93P\x83` \x82\x02\x85\x01a\x1FD\x85a\x1D\xB2V[\x80_[\x85\x81\x10\x15a\x1F\x7FW\x84\x84\x03\x89R\x81Qa\x1F`\x85\x82a\x1E\xFFV[\x94Pa\x1Fk\x83a\x1F\x12V[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90Pa\x1FGV[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x1F\xA9\x81\x84a\x1F\x1EV[\x90P\x92\x91PPV[a\x1F\xBA\x81a\x1D\xD0V[\x81\x14a\x1F\xC4W_\x80\xFD[PV[_\x815\x90Pa\x1F\xD5\x81a\x1F\xB1V[\x92\x91PPV[_\x80_\x80`\x80\x85\x87\x03\x12\x15a\x1F\xF3Wa\x1F\xF2a\x1AOV[[_a \0\x87\x82\x88\x01a\x1AvV[\x94PP` a \x11\x87\x82\x88\x01a\x1F\xC7V[\x93PP`@a \"\x87\x82\x88\x01a\x1AvV[\x92PP``a 3\x87\x82\x88\x01a\x1AvV[\x91PP\x92\x95\x91\x94P\x92PV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_`\x80\x83\x01_\x83\x01Qa }_\x86\x01\x82a\x1D\xC1V[P` \x83\x01Qa \x90` \x86\x01\x82a\x1D\xD9V[P`@\x83\x01Qa \xA3`@\x86\x01\x82a\x1D\xC1V[P``\x83\x01Q\x84\x82\x03``\x86\x01Ra \xBB\x82\x82a\x1ECV[\x91PP\x80\x91PP\x92\x91PPV[_a \xD3\x83\x83a hV[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a \xF1\x82a ?V[a \xFB\x81\x85a IV[\x93P\x83` \x82\x02\x85\x01a!\r\x85a YV[\x80_[\x85\x81\x10\x15a!HW\x84\x84\x03\x89R\x81Qa!)\x85\x82a \xC8V[\x94Pa!4\x83a \xDBV[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90Pa!\x10V[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra!r\x81\x84a \xE7V[\x90P\x92\x91PPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_a!\x94\x82a\x1D\xE8V[a!\x9E\x81\x85a!zV[\x93Pa!\xA9\x83a\x1E\x02V[\x80_[\x83\x81\x10\x15a!\xD9W\x81Qa!\xC0\x88\x82a\x1E V[\x97Pa!\xCB\x83a\x1E7V[\x92PP`\x01\x81\x01\x90Pa!\xACV[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra!\xFE\x81\x84a!\x8AV[\x90P\x92\x91PPV[_\x81\x90P\x92\x91PPV[_a\"\x1A\x82a\x19\x9CV[a\"$\x81\x85a\"\x06V[\x93Pa\"4\x81\x85` \x86\x01a\x19\xB6V[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_a\"t`\x02\x83a\"\x06V[\x91Pa\"\x7F\x82a\"@V[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_a\"\xBE`\x01\x83a\"\x06V[\x91Pa\"\xC9\x82a\"\x8AV[`\x01\x82\x01\x90P\x91\x90PV[_a\"\xDF\x82\x87a\"\x10V[\x91Pa\"\xEA\x82a\"hV[\x91Pa\"\xF6\x82\x86a\"\x10V[\x91Pa#\x01\x82a\"\xB2V[\x91Pa#\r\x82\x85a\"\x10V[\x91Pa#\x18\x82a\"\xB2V[\x91Pa#$\x82\x84a\"\x10V[\x91P\x81\x90P\x95\x94PPPPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[a#N\x81a#2V[\x82RPPV[_` \x82\x01\x90Pa#g_\x83\x01\x84a#EV[\x92\x91PPV[\x7FNH{q\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_R`2`\x04R`$_\xFD[a#\xA3\x81a\x1B\x07V[\x82RPPV[_` \x82\x01\x90Pa#\xBC_\x83\x01\x84a#\x9AV[\x92\x91PPV[a#\xCB\x81a\x1A\xB5V[\x81\x14a#\xD5W_\x80\xFD[PV[_\x81Q\x90Pa#\xE6\x81a#\xC2V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a$\x01Wa$\0a\x1AOV[[_a$\x0E\x84\x82\x85\x01a#\xD8V[\x91PP\x92\x91PPV[a$ \x81a\x1D\xD0V[\x82RPPV[_` \x82\x01\x90Pa$9_\x83\x01\x84a$\x17V[\x92\x91PPV[_`@\x82\x01\x90Pa$R_\x83\x01\x85a\x1C\xC8V[a$_` \x83\x01\x84a#\x9AV[\x93\x92PPPV[_`\x80\x82\x01\x90Pa$y_\x83\x01\x87a\x1C\xC8V[a$\x86` \x83\x01\x86a$\x17V[a$\x93`@\x83\x01\x85a\x1C\xC8V[a$\xA0``\x83\x01\x84a\x1C\xC8V[\x95\x94PPPPPV[\x7FNH{q\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_R`\x11`\x04R`$_\xFD[_a$\xE0\x82a\x1D\xD0V[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03a%\x12Wa%\x11a$\xA9V[[`\x01\x82\x01\x90P\x91\x90PV[_\x81T\x90P\x91\x90PV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_\x81_\x1C\x90P\x91\x90PV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a%ua%p\x83a%9V[a%DV[\x90P\x91\x90PV[_a%\x87\x82Ta%cV[\x90P\x91\x90PV[_`\x01\x82\x01\x90P\x91\x90PV[_a%\xA4\x82a%\x1DV[a%\xAE\x81\x85a!zV[\x93Pa%\xB9\x83a%'V[\x80_[\x83\x81\x10\x15a%\xF0Wa%\xCD\x82a%|V[a%\xD7\x88\x82a\x1E V[\x97Pa%\xE2\x83a%\x8EV[\x92PP`\x01\x81\x01\x90Pa%\xBCV[P\x85\x93PPPP\x92\x91PPV[_``\x82\x01\x90Pa&\x10_\x83\x01\x86a\x1C\xC8V[a&\x1D` \x83\x01\x85a\x1C\xC8V[\x81\x81\x03`@\x83\x01Ra&/\x81\x84a%\x9AV[\x90P\x94\x93PPPPV[\x7FNH{q\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_R`\x12`\x04R`$_\xFD[_\x81Q\x90Pa&t\x81a\x1B\x18V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a&\x8FWa&\x8Ea\x1AOV[[_a&\x9C\x84\x82\x85\x01a&fV[\x91PP\x92\x91PPV[_\x81Q\x90Pa&\xB3\x81a\x1A`V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a&\xCEWa&\xCDa\x1AOV[[_a&\xDB\x84\x82\x85\x01a&\xA5V[\x91PP\x92\x91PPV[_\x81Q\x90Pa&\xF2\x81a\x1F\xB1V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a'\rWa'\x0Ca\x1AOV[[_a'\x1A\x84\x82\x85\x01a&\xE4V[\x91PP\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[_a'A\x82a'#V[a'K\x81\x85a'-V[\x93Pa'[\x81\x85` \x86\x01a\x19\xB6V[\x80\x84\x01\x91PP\x92\x91PPV[_a'r\x82\x84a'7V[\x91P\x81\x90P\x92\x91PPV", + b"`\xA0`@R0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RP4\x80\x15b\0\0CW_\x80\xFD[Pb\0\0Tb\0\0Z` \x1B` \x1CV[b\0\x01\xC4V[_b\0\0kb\0\x01^` \x1B` \x1CV[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15b\0\0\xB6W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14b\0\x01[Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Qb\0\x01R\x91\x90b\0\x01\xA9V[`@Q\x80\x91\x03\x90\xA1[PV[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[b\0\x01\xA3\x81b\0\x01\x85V[\x82RPPV[_` \x82\x01\x90Pb\0\x01\xBE_\x83\x01\x84b\0\x01\x98V[\x92\x91PPV[`\x80Qa'\xB1b\0\x01\xEB_9_\x81\x81a\x10\xDF\x01R\x81\x81a\x114\x01Ra\x13\xD6\x01Ra'\xB1_\xF3\xFE`\x80`@R`\x046\x10a\0\x90W_5`\xE0\x1C\x80cU\xC4\xD9\x97\x11a\0XW\x80cU\xC4\xD9\x97\x14a\x01VW\x80c\x90\xF3\x03T\x14a\x01\x92W\x80c\xA1O\x89q\x14a\x01\xBAW\x80c\xAD<\xB1\xCC\x14a\x01\xF6W\x80c\xE6\xF6\xAB\x94\x14a\x02 Wa\0\x90V[\x80c\r\x8En,\x14a\0\x94W\x80c-\xDC\x9Ao\x14a\0\xBEW\x80c9\xF78\x10\x14a\0\xFAW\x80cO\x1E\xF2\x86\x14a\x01\x10W\x80cR\xD1\x90-\x14a\x01,W[_\x80\xFD[4\x80\x15a\0\x9FW_\x80\xFD[Pa\0\xA8a\x02\\V[`@Qa\0\xB5\x91\x90a\x1AZV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\0\xC9W_\x80\xFD[Pa\0\xE4`\x04\x806\x03\x81\x01\x90a\0\xDF\x91\x90a\x1A\xBEV[a\x02\xD7V[`@Qa\0\xF1\x91\x90a\x1B\x03V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x05W_\x80\xFD[Pa\x01\x0Ea\x03\x0BV[\0[a\x01*`\x04\x806\x03\x81\x01\x90a\x01%\x91\x90a\x1C\xA2V[a\x04{V[\0[4\x80\x15a\x017W_\x80\xFD[Pa\x01@a\x04\x9AV[`@Qa\x01M\x91\x90a\x1D\x0BV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01aW_\x80\xFD[Pa\x01|`\x04\x806\x03\x81\x01\x90a\x01w\x91\x90a\x1D\x81V[a\x04\xCBV[`@Qa\x01\x89\x91\x90a\x1F\xC5V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x9DW_\x80\xFD[Pa\x01\xB8`\x04\x806\x03\x81\x01\x90a\x01\xB3\x91\x90a \x0FV[a\x07HV[\0[4\x80\x15a\x01\xC5W_\x80\xFD[Pa\x01\xE0`\x04\x806\x03\x81\x01\x90a\x01\xDB\x91\x90a\x1D\x81V[a\x0C)V[`@Qa\x01\xED\x91\x90a!\x8EV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\x01W_\x80\xFD[Pa\x02\na\x0E\xA6V[`@Qa\x02\x17\x91\x90a\x1AZV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02+W_\x80\xFD[Pa\x02F`\x04\x806\x03\x81\x01\x90a\x02A\x91\x90a\x1A\xBEV[a\x0E\xDFV[`@Qa\x02S\x91\x90a\"\x1AV[`@Q\x80\x91\x03\x90\xF3[```@Q\x80`@\x01`@R\x80`\x11\x81R` \x01\x7FCiphertextCommits\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RPa\x02\x9D_a\x0F\xA1V[a\x02\xA7`\x01a\x0F\xA1V[a\x02\xB0_a\x0F\xA1V[`@Q` \x01a\x02\xC3\x94\x93\x92\x91\x90a#\x08V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x90V[_\x80a\x02\xE1a\x10kV[\x90P\x80`\x03\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[`\x01a\x03\x15a\x10\x92V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x03VW`@Q\x7FoOs\x1F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02_a\x03aa\x10\xB6V[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x80a\x03\xA9WP\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x15[\x15a\x03\xE0W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`\x01\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x82`@Qa\x04o\x91\x90a#\x88V[`@Q\x80\x91\x03\x90\xA1PPV[a\x04\x83a\x10\xDDV[a\x04\x8C\x82a\x11\xC3V[a\x04\x96\x82\x82a\x12\xB6V[PPV[_a\x04\xA3a\x13\xD4V[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[``_a\x04\xD6a\x10kV[\x90P\x83\x83\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x04\xF5Wa\x04\xF4a\x1B~V[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x05.W\x81` \x01[a\x05\x1Ba\x19zV[\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x05\x13W\x90P[P\x91P_[\x84\x84\x90P\x81\x10\x15a\x07@Wa\x05`\x85\x85\x83\x81\x81\x10a\x05TWa\x05Sa#\xA1V[[\x90P` \x02\x015a\x02\xD7V[a\x05\xBAW\x84\x84\x82\x81\x81\x10a\x05wWa\x05va#\xA1V[[\x90P` \x02\x015`@Q\x7F\x06f\xCB\xDF\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\x81R`\x04\x01a\x05\xB1\x91\x90a\x1D\x0BV[`@Q\x80\x91\x03\x90\xFD[_\x82`\x05\x01_\x87\x87\x85\x81\x81\x10a\x05\xD3Wa\x05\xD2a#\xA1V[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x90P_\x83`\x07\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x06{W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x062W[PPPPP\x90P`@Q\x80`\x80\x01`@R\x80\x88\x88\x86\x81\x81\x10a\x06\xA0Wa\x06\x9Fa#\xA1V[[\x90P` \x02\x015\x81R` \x01\x85_\x01_\x8A\x8A\x88\x81\x81\x10a\x06\xC3Wa\x06\xC2a#\xA1V[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x81R` \x01\x85`\x01\x01_\x8A\x8A\x88\x81\x81\x10a\x06\xF5Wa\x06\xF4a#\xA1V[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x81R` \x01\x82\x81RP\x85\x84\x81Q\x81\x10a\x07&Wa\x07%a#\xA1V[[` \x02` \x01\x01\x81\x90RPPP\x80\x80`\x01\x01\x91PPa\x053V[PP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x07\x95\x91\x90a#\xDDV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\xB0W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xD4\x91\x90a$ V[a\x08\x15W3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x08\x0C\x91\x90a#\xDDV[`@Q\x80\x91\x03\x90\xFD[\x83_a\x08 \x82a\x14[V[\x90Ps\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xBF\xF3\xAA\xBA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x08o\x91\x90a$ZV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x08\x8AW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08\xAE\x91\x90a$ V[a\x08\xEFW\x80`@Q\x7F\xB6g\x9C;\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\x81R`\x04\x01a\x08\xE6\x91\x90a$ZV[`@Q\x80\x91\x03\x90\xFD[_a\x08\xF8a\x10kV[\x90P\x80`\x06\x01_\x88\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\t\x99W\x863`@Q\x7F\x1D\xD7%\x0C\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\x81R`\x04\x01a\t\x90\x92\x91\x90a$sV[`@Q\x80\x91\x03\x90\xFD[_\x87\x87\x87\x87`@Q` \x01a\t\xB1\x94\x93\x92\x91\x90a$\x9AV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x81`\x04\x01_\x82\x81R` \x01\x90\x81R` \x01_ _\x81T\x80\x92\x91\x90a\t\xEC\x90a%\nV[\x91\x90PUP_\x82`\x08\x01_\x83\x81R` \x01\x90\x81R` \x01_ T\x03a\n%W`\x01\x82`\x08\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP[`\x01\x82`\x06\x01_\x8A\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x81`\x07\x01_\x82\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x81`\x03\x01_\x89\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x0BAWPa\x0B@\x82`\x04\x01_\x83\x81R` \x01\x90\x81R` \x01_ Ta\x14tV[[\x15a\x0C\x1FW\x85\x82`\x01\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x84\x82`\x02\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x86\x82_\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x81\x90UP`\x01\x82`\x03\x01_\x8A\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x80\x82`\x05\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x87\x7F\xCB\x89\xCC\xB3G\x01\x8D\x7F(+\xB4\xC0H\xE15\xE1\x9B\xC1\xD16`\xFA\x0F(P\xE1\x05\x18B%6\xDE\x87\x87\x85`\x07\x01_\x86\x81R` \x01\x90\x81R` \x01_ `@Qa\x0C\x16\x93\x92\x91\x90a&1V[`@Q\x80\x91\x03\x90\xA2[PPPPPPPPV[``_a\x0C4a\x10kV[\x90P\x83\x83\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0CSWa\x0CRa\x1B~V[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x0C\x8CW\x81` \x01[a\x0Cya\x19\xA5V[\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x0CqW\x90P[P\x91P_[\x84\x84\x90P\x81\x10\x15a\x0E\x9EWa\x0C\xBE\x85\x85\x83\x81\x81\x10a\x0C\xB2Wa\x0C\xB1a#\xA1V[[\x90P` \x02\x015a\x02\xD7V[a\r\x18W\x84\x84\x82\x81\x81\x10a\x0C\xD5Wa\x0C\xD4a#\xA1V[[\x90P` \x02\x015`@Q\x7F\x06f\xCB\xDF\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\x81R`\x04\x01a\r\x0F\x91\x90a\x1D\x0BV[`@Q\x80\x91\x03\x90\xFD[_\x82`\x05\x01_\x87\x87\x85\x81\x81\x10a\r1Wa\r0a#\xA1V[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x90P_\x83`\x07\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\r\xD9W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\r\x90W[PPPPP\x90P`@Q\x80`\x80\x01`@R\x80\x88\x88\x86\x81\x81\x10a\r\xFEWa\r\xFDa#\xA1V[[\x90P` \x02\x015\x81R` \x01\x85_\x01_\x8A\x8A\x88\x81\x81\x10a\x0E!Wa\x0E a#\xA1V[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x81R` \x01\x85`\x02\x01_\x8A\x8A\x88\x81\x81\x10a\x0ESWa\x0ERa#\xA1V[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x81R` \x01\x82\x81RP\x85\x84\x81Q\x81\x10a\x0E\x84Wa\x0E\x83a#\xA1V[[` \x02` \x01\x01\x81\x90RPPP\x80\x80`\x01\x01\x91PPa\x0C\x91V[PP\x92\x91PPV[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[``_a\x0E\xEAa\x10kV[\x90P_\x81`\x05\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x07\x01_\x82\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x0F\x93W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x0FJW[PPPPP\x92PPP\x91\x90PV[``_`\x01a\x0F\xAF\x84a\x15\x05V[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0F\xCDWa\x0F\xCCa\x1B~V[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0F\xFFW\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a\x10`W\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a\x10UWa\x10Ta&mV[[\x04\x94P_\x85\x03a\x10\x0CW[\x81\x93PPPP\x91\x90PV[_\x7F\xF4\x1C`\xEA[\x83\xC8\xF1\x9Bf6\x13\xFF\xDD?\xA4A\xA5\x993\xB8\xA4\xFD\xF4\xDA\x89\x1B8C=\x1A\0\x90P\x90V[_a\x10\x9Ba\x10\xB6V[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a\x11\x8AWP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x11qa\x16VV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x11\xC1W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x12 W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x12D\x91\x90a&\xAEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x12\xB3W3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\x12\xAA\x91\x90a#\xDDV[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a\x13\x1EWP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13\x1B\x91\x90a&\xEDV[`\x01[a\x13_W\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x13V\x91\x90a#\xDDV[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a\x13\xC5W\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a\x13\xBC\x91\x90a\x1D\x0BV[`@Q\x80\x91\x03\x90\xFD[a\x13\xCF\x83\x83a\x16\xA9V[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x14YW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x10\x83_\x1C\x90\x1C\x16\x90P\x91\x90PV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cg\x99\xEFR`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x14\xD3W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x14\xF7\x91\x90a',V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a\x15aWz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a\x15WWa\x15Va&mV[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x15\x9EWm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a\x15\x94Wa\x15\x93a&mV[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a\x15\xCDWf#\x86\xF2o\xC1\0\0\x83\x81a\x15\xC3Wa\x15\xC2a&mV[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a\x15\xF6Wc\x05\xF5\xE1\0\x83\x81a\x15\xECWa\x15\xEBa&mV[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a\x16\x1BWa'\x10\x83\x81a\x16\x11Wa\x16\x10a&mV[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a\x16>W`d\x83\x81a\x164Wa\x163a&mV[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a\x16MW`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[_a\x16\x82\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba\x17\x1BV[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a\x16\xB2\x82a\x17$V[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a\x17\x0EWa\x17\x08\x82\x82a\x17\xEDV[Pa\x17\x17V[a\x17\x16a\x18mV[[PPV[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a\x17\x7FW\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x17v\x91\x90a#\xDDV[`@Q\x80\x91\x03\x90\xFD[\x80a\x17\xAB\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba\x17\x1BV[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa\x18\x16\x91\x90a'\x9BV[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a\x18NW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a\x18SV[``\x91P[P\x91P\x91Pa\x18c\x85\x83\x83a\x18\xA9V[\x92PPP\x92\x91PPV[_4\x11\x15a\x18\xA7W`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[``\x82a\x18\xBEWa\x18\xB9\x82a\x196V[a\x19.V[_\x82Q\x14\x80\x15a\x18\xE4WP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a\x19&W\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a\x19\x1D\x91\x90a#\xDDV[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa\x19/V[[\x93\x92PPPV[_\x81Q\x11\x15a\x19HW\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x80`\x80\x01`@R\x80_\x80\x19\x16\x81R` \x01_\x81R` \x01_\x80\x19\x16\x81R` \x01``\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80_\x80\x19\x16\x81R` \x01_\x81R` \x01_\x80\x19\x16\x81R` \x01``\x81RP\x90V[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15a\x1A\x07W\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa\x19\xECV[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a\x1A,\x82a\x19\xD0V[a\x1A6\x81\x85a\x19\xDAV[\x93Pa\x1AF\x81\x85` \x86\x01a\x19\xEAV[a\x1AO\x81a\x1A\x12V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x1Ar\x81\x84a\x1A\"V[\x90P\x92\x91PPV[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[a\x1A\x9D\x81a\x1A\x8BV[\x81\x14a\x1A\xA7W_\x80\xFD[PV[_\x815\x90Pa\x1A\xB8\x81a\x1A\x94V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x1A\xD3Wa\x1A\xD2a\x1A\x83V[[_a\x1A\xE0\x84\x82\x85\x01a\x1A\xAAV[\x91PP\x92\x91PPV[_\x81\x15\x15\x90P\x91\x90PV[a\x1A\xFD\x81a\x1A\xE9V[\x82RPPV[_` \x82\x01\x90Pa\x1B\x16_\x83\x01\x84a\x1A\xF4V[\x92\x91PPV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a\x1BE\x82a\x1B\x1CV[\x90P\x91\x90PV[a\x1BU\x81a\x1B;V[\x81\x14a\x1B_W_\x80\xFD[PV[_\x815\x90Pa\x1Bp\x81a\x1BLV[\x92\x91PPV[_\x80\xFD[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[a\x1B\xB4\x82a\x1A\x12V[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1B\xD3Wa\x1B\xD2a\x1B~V[[\x80`@RPPPV[_a\x1B\xE5a\x1AzV[\x90Pa\x1B\xF1\x82\x82a\x1B\xABV[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a\x1C\x10Wa\x1C\x0Fa\x1B~V[[a\x1C\x19\x82a\x1A\x12V[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_a\x1CFa\x1CA\x84a\x1B\xF6V[a\x1B\xDCV[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15a\x1CbWa\x1Caa\x1BzV[[a\x1Cm\x84\x82\x85a\x1C&V[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12a\x1C\x89Wa\x1C\x88a\x1BvV[[\x815a\x1C\x99\x84\x82` \x86\x01a\x1C4V[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a\x1C\xB8Wa\x1C\xB7a\x1A\x83V[[_a\x1C\xC5\x85\x82\x86\x01a\x1BbV[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1C\xE6Wa\x1C\xE5a\x1A\x87V[[a\x1C\xF2\x85\x82\x86\x01a\x1CuV[\x91PP\x92P\x92\x90PV[a\x1D\x05\x81a\x1A\x8BV[\x82RPPV[_` \x82\x01\x90Pa\x1D\x1E_\x83\x01\x84a\x1C\xFCV[\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12a\x1DAWa\x1D@a\x1BvV[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1D^Wa\x1D]a\x1D$V[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15a\x1DzWa\x1Dya\x1D(V[[\x92P\x92\x90PV[_\x80` \x83\x85\x03\x12\x15a\x1D\x97Wa\x1D\x96a\x1A\x83V[[_\x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1D\xB4Wa\x1D\xB3a\x1A\x87V[[a\x1D\xC0\x85\x82\x86\x01a\x1D,V[\x92P\x92PP\x92P\x92\x90PV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a\x1D\xFE\x81a\x1A\x8BV[\x82RPPV[_\x81\x90P\x91\x90PV[a\x1E\x16\x81a\x1E\x04V[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a\x1EN\x81a\x1B;V[\x82RPPV[_a\x1E_\x83\x83a\x1EEV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a\x1E\x81\x82a\x1E\x1CV[a\x1E\x8B\x81\x85a\x1E&V[\x93Pa\x1E\x96\x83a\x1E6V[\x80_[\x83\x81\x10\x15a\x1E\xC6W\x81Qa\x1E\xAD\x88\x82a\x1ETV[\x97Pa\x1E\xB8\x83a\x1EkV[\x92PP`\x01\x81\x01\x90Pa\x1E\x99V[P\x85\x93PPPP\x92\x91PPV[_`\x80\x83\x01_\x83\x01Qa\x1E\xE8_\x86\x01\x82a\x1D\xF5V[P` \x83\x01Qa\x1E\xFB` \x86\x01\x82a\x1E\rV[P`@\x83\x01Qa\x1F\x0E`@\x86\x01\x82a\x1D\xF5V[P``\x83\x01Q\x84\x82\x03``\x86\x01Ra\x1F&\x82\x82a\x1EwV[\x91PP\x80\x91PP\x92\x91PPV[_a\x1F>\x83\x83a\x1E\xD3V[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a\x1F\\\x82a\x1D\xCCV[a\x1Ff\x81\x85a\x1D\xD6V[\x93P\x83` \x82\x02\x85\x01a\x1Fx\x85a\x1D\xE6V[\x80_[\x85\x81\x10\x15a\x1F\xB3W\x84\x84\x03\x89R\x81Qa\x1F\x94\x85\x82a\x1F3V[\x94Pa\x1F\x9F\x83a\x1FFV[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90Pa\x1F{V[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x1F\xDD\x81\x84a\x1FRV[\x90P\x92\x91PPV[a\x1F\xEE\x81a\x1E\x04V[\x81\x14a\x1F\xF8W_\x80\xFD[PV[_\x815\x90Pa \t\x81a\x1F\xE5V[\x92\x91PPV[_\x80_\x80`\x80\x85\x87\x03\x12\x15a 'Wa &a\x1A\x83V[[_a 4\x87\x82\x88\x01a\x1A\xAAV[\x94PP` a E\x87\x82\x88\x01a\x1F\xFBV[\x93PP`@a V\x87\x82\x88\x01a\x1A\xAAV[\x92PP``a g\x87\x82\x88\x01a\x1A\xAAV[\x91PP\x92\x95\x91\x94P\x92PV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_`\x80\x83\x01_\x83\x01Qa \xB1_\x86\x01\x82a\x1D\xF5V[P` \x83\x01Qa \xC4` \x86\x01\x82a\x1E\rV[P`@\x83\x01Qa \xD7`@\x86\x01\x82a\x1D\xF5V[P``\x83\x01Q\x84\x82\x03``\x86\x01Ra \xEF\x82\x82a\x1EwV[\x91PP\x80\x91PP\x92\x91PPV[_a!\x07\x83\x83a \x9CV[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a!%\x82a sV[a!/\x81\x85a }V[\x93P\x83` \x82\x02\x85\x01a!A\x85a \x8DV[\x80_[\x85\x81\x10\x15a!|W\x84\x84\x03\x89R\x81Qa!]\x85\x82a \xFCV[\x94Pa!h\x83a!\x0FV[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90Pa!DV[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra!\xA6\x81\x84a!\x1BV[\x90P\x92\x91PPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_a!\xC8\x82a\x1E\x1CV[a!\xD2\x81\x85a!\xAEV[\x93Pa!\xDD\x83a\x1E6V[\x80_[\x83\x81\x10\x15a\"\rW\x81Qa!\xF4\x88\x82a\x1ETV[\x97Pa!\xFF\x83a\x1EkV[\x92PP`\x01\x81\x01\x90Pa!\xE0V[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\"2\x81\x84a!\xBEV[\x90P\x92\x91PPV[_\x81\x90P\x92\x91PPV[_a\"N\x82a\x19\xD0V[a\"X\x81\x85a\":V[\x93Pa\"h\x81\x85` \x86\x01a\x19\xEAV[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_a\"\xA8`\x02\x83a\":V[\x91Pa\"\xB3\x82a\"tV[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_a\"\xF2`\x01\x83a\":V[\x91Pa\"\xFD\x82a\"\xBEV[`\x01\x82\x01\x90P\x91\x90PV[_a#\x13\x82\x87a\"DV[\x91Pa#\x1E\x82a\"\x9CV[\x91Pa#*\x82\x86a\"DV[\x91Pa#5\x82a\"\xE6V[\x91Pa#A\x82\x85a\"DV[\x91Pa#L\x82a\"\xE6V[\x91Pa#X\x82\x84a\"DV[\x91P\x81\x90P\x95\x94PPPPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[a#\x82\x81a#fV[\x82RPPV[_` \x82\x01\x90Pa#\x9B_\x83\x01\x84a#yV[\x92\x91PPV[\x7FNH{q\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_R`2`\x04R`$_\xFD[a#\xD7\x81a\x1B;V[\x82RPPV[_` \x82\x01\x90Pa#\xF0_\x83\x01\x84a#\xCEV[\x92\x91PPV[a#\xFF\x81a\x1A\xE9V[\x81\x14a$\tW_\x80\xFD[PV[_\x81Q\x90Pa$\x1A\x81a#\xF6V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a$5Wa$4a\x1A\x83V[[_a$B\x84\x82\x85\x01a$\x0CV[\x91PP\x92\x91PPV[a$T\x81a\x1E\x04V[\x82RPPV[_` \x82\x01\x90Pa$m_\x83\x01\x84a$KV[\x92\x91PPV[_`@\x82\x01\x90Pa$\x86_\x83\x01\x85a\x1C\xFCV[a$\x93` \x83\x01\x84a#\xCEV[\x93\x92PPPV[_`\x80\x82\x01\x90Pa$\xAD_\x83\x01\x87a\x1C\xFCV[a$\xBA` \x83\x01\x86a$KV[a$\xC7`@\x83\x01\x85a\x1C\xFCV[a$\xD4``\x83\x01\x84a\x1C\xFCV[\x95\x94PPPPPV[\x7FNH{q\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_R`\x11`\x04R`$_\xFD[_a%\x14\x82a\x1E\x04V[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03a%FWa%Ea$\xDDV[[`\x01\x82\x01\x90P\x91\x90PV[_\x81T\x90P\x91\x90PV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_\x81_\x1C\x90P\x91\x90PV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a%\xA9a%\xA4\x83a%mV[a%xV[\x90P\x91\x90PV[_a%\xBB\x82Ta%\x97V[\x90P\x91\x90PV[_`\x01\x82\x01\x90P\x91\x90PV[_a%\xD8\x82a%QV[a%\xE2\x81\x85a!\xAEV[\x93Pa%\xED\x83a%[V[\x80_[\x83\x81\x10\x15a&$Wa&\x01\x82a%\xB0V[a&\x0B\x88\x82a\x1ETV[\x97Pa&\x16\x83a%\xC2V[\x92PP`\x01\x81\x01\x90Pa%\xF0V[P\x85\x93PPPP\x92\x91PPV[_``\x82\x01\x90Pa&D_\x83\x01\x86a\x1C\xFCV[a&Q` \x83\x01\x85a\x1C\xFCV[\x81\x81\x03`@\x83\x01Ra&c\x81\x84a%\xCEV[\x90P\x94\x93PPPPV[\x7FNH{q\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_R`\x12`\x04R`$_\xFD[_\x81Q\x90Pa&\xA8\x81a\x1BLV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a&\xC3Wa&\xC2a\x1A\x83V[[_a&\xD0\x84\x82\x85\x01a&\x9AV[\x91PP\x92\x91PPV[_\x81Q\x90Pa&\xE7\x81a\x1A\x94V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a'\x02Wa'\x01a\x1A\x83V[[_a'\x0F\x84\x82\x85\x01a&\xD9V[\x91PP\x92\x91PPV[_\x81Q\x90Pa'&\x81a\x1F\xE5V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a'AWa'@a\x1A\x83V[[_a'N\x84\x82\x85\x01a'\x18V[\x91PP\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[_a'u\x82a'WV[a'\x7F\x81\x85a'aV[\x93Pa'\x8F\x81\x85` \x86\x01a\x19\xEAV[\x80\x84\x01\x91PP\x92\x91PPV[_a'\xA6\x82\x84a'kV[\x91P\x81\x90P\x92\x91PPV", ); /// The runtime bytecode of the contract, as deployed on the network. /// /// ```text - ///0x608060405260043610610090575f3560e01c806355c4d9971161005857806355c4d9971461015657806390f3035414610192578063a14f8971146101ba578063ad3cb1cc146101f6578063e6f6ab941461022057610090565b80630d8e6e2c146100945780632ddc9a6f146100be57806339f73810146100fa5780634f1ef2861461011057806352d1902d1461012c575b5f80fd5b34801561009f575f80fd5b506100a861025c565b6040516100b59190611a26565b60405180910390f35b3480156100c9575f80fd5b506100e460048036038101906100df9190611a8a565b6102d7565b6040516100f19190611acf565b60405180910390f35b348015610105575f80fd5b5061010e61030b565b005b61012a60048036038101906101259190611c6e565b61047b565b005b348015610137575f80fd5b5061014061049a565b60405161014d9190611cd7565b60405180910390f35b348015610161575f80fd5b5061017c60048036038101906101779190611d4d565b6104cb565b6040516101899190611f91565b60405180910390f35b34801561019d575f80fd5b506101b860048036038101906101b39190611fdb565b610748565b005b3480156101c5575f80fd5b506101e060048036038101906101db9190611d4d565b610bf5565b6040516101ed919061215a565b60405180910390f35b348015610201575f80fd5b5061020a610e72565b6040516102179190611a26565b60405180910390f35b34801561022b575f80fd5b5061024660048036038101906102419190611a8a565b610eab565b60405161025391906121e6565b60405180910390f35b60606040518060400160405280601181526020017f43697068657274657874436f6d6d69747300000000000000000000000000000081525061029d5f610f6d565b6102a76001610f6d565b6102b05f610f6d565b6040516020016102c394939291906122d4565b604051602081830303815290604052905090565b5f806102e1611037565b9050806003015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b600161031561105e565b67ffffffffffffffff1614610356576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f610361611082565b9050805f0160089054906101000a900460ff16806103a957508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b156103e0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff0219169083151502179055505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d28260405161046f9190612354565b60405180910390a15050565b6104836110a9565b61048c8261118f565b6104968282611282565b5050565b5f6104a36113a0565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b60605f6104d6611037565b90508383905067ffffffffffffffff8111156104f5576104f4611b4a565b5b60405190808252806020026020018201604052801561052e57816020015b61051b611946565b8152602001906001900390816105135790505b5091505f5b84849050811015610740576105608585838181106105545761055361236d565b5b905060200201356102d7565b6105ba578484828181106105775761057661236d565b5b905060200201356040517f0666cbdf0000000000000000000000000000000000000000000000000000000081526004016105b19190611cd7565b60405180910390fd5b5f826005015f8787858181106105d3576105d261236d565b5b9050602002013581526020019081526020015f205490505f836007015f8381526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561067b57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610632575b5050505050905060405180608001604052808888868181106106a05761069f61236d565b5b905060200201358152602001855f015f8a8a888181106106c3576106c261236d565b5b9050602002013581526020019081526020015f20548152602001856001015f8a8a888181106106f5576106f461236d565b5b9050602002013581526020019081526020015f20548152602001828152508584815181106107265761072561236d565b5b602002602001018190525050508080600101915050610533565b505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b815260040161079591906123a9565b602060405180830381865afa1580156107b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d491906123ec565b61081557336040517f52d725f500000000000000000000000000000000000000000000000000000000815260040161080c91906123a9565b60405180910390fd5b835f61082082611427565b905073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663bff3aaba826040518263ffffffff1660e01b815260040161086f9190612426565b602060405180830381865afa15801561088a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ae91906123ec565b6108ef57806040517fb6679c3b0000000000000000000000000000000000000000000000000000000081526004016108e69190612426565b60405180910390fd5b5f6108f8611037565b9050806006015f8881526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156109995786336040517f1dd7250c00000000000000000000000000000000000000000000000000000000815260040161099092919061243f565b60405180910390fd5b5f878787876040516020016109b19493929190612466565b604051602081830303815290604052805190602001209050816004015f8281526020019081526020015f205f8154809291906109ec906124d6565b91905055506001826006015f8a81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550816007015f8281526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816003015f8981526020019081526020015f205f9054906101000a900460ff16158015610b0d5750610b0c826004015f8381526020019081526020015f2054611440565b5b15610beb5785826001015f8a81526020019081526020015f208190555084826002015f8a81526020019081526020015f208190555086825f015f8a81526020019081526020015f20819055506001826003015f8a81526020019081526020015f205f6101000a81548160ff02191690831515021790555080826005015f8a81526020019081526020015f2081905550877fcb89ccb347018d7f282bb4c048e135e19bc1d13660fa0f2850e10518422536de8787856007015f8681526020019081526020015f20604051610be2939291906125fd565b60405180910390a25b5050505050505050565b60605f610c00611037565b90508383905067ffffffffffffffff811115610c1f57610c1e611b4a565b5b604051908082528060200260200182016040528015610c5857816020015b610c45611971565b815260200190600190039081610c3d5790505b5091505f5b84849050811015610e6a57610c8a858583818110610c7e57610c7d61236d565b5b905060200201356102d7565b610ce457848482818110610ca157610ca061236d565b5b905060200201356040517f0666cbdf000000000000000000000000000000000000000000000000000000008152600401610cdb9190611cd7565b60405180910390fd5b5f826005015f878785818110610cfd57610cfc61236d565b5b9050602002013581526020019081526020015f205490505f836007015f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610da557602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610d5c575b505050505090506040518060800160405280888886818110610dca57610dc961236d565b5b905060200201358152602001855f015f8a8a88818110610ded57610dec61236d565b5b9050602002013581526020019081526020015f20548152602001856002015f8a8a88818110610e1f57610e1e61236d565b5b9050602002013581526020019081526020015f2054815260200182815250858481518110610e5057610e4f61236d565b5b602002602001018190525050508080600101915050610c5d565b505092915050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60605f610eb6611037565b90505f816005015f8581526020019081526020015f20549050816007015f8281526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610f5f57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f16575b505050505092505050919050565b60605f6001610f7b846114d1565b0190505f8167ffffffffffffffff811115610f9957610f98611b4a565b5b6040519080825280601f01601f191660200182016040528015610fcb5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561102c578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161102157611020612639565b5b0494505f8503610fd8575b819350505050919050565b5f7ff41c60ea5b83c8f19b663613ffdd3fa441a59933b8a4fdf4da891b38433d1a00905090565b5f611067611082565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061115657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661113d611622565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561118d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611210919061267a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461127f57336040517f0e56cf3d00000000000000000000000000000000000000000000000000000000815260040161127691906123a9565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156112ea57506040513d601f19601f820116820180604052508101906112e791906126b9565b60015b61132b57816040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161132291906123a9565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461139157806040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004016113889190611cd7565b60405180910390fd5b61139b8383611675565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611425576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f67ffffffffffffffff6010835f1c901c169050919050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16636799ef526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c391906126f8565b905080831015915050919050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061152d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161152357611522612639565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061156a576d04ee2d6d415b85acef810000000083816115605761155f612639565b5b0492506020810190505b662386f26fc10000831061159957662386f26fc10000838161158f5761158e612639565b5b0492506010810190505b6305f5e10083106115c2576305f5e10083816115b8576115b7612639565b5b0492506008810190505b61271083106115e75761271083816115dd576115dc612639565b5b0492506004810190505b6064831061160a5760648381611600576115ff612639565b5b0492506002810190505b600a8310611619576001810190505b80915050919050565b5f61164e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6116e7565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61167e826116f0565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156116da576116d482826117b9565b506116e3565b6116e2611839565b5b5050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361174b57806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161174291906123a9565b60405180910390fd5b806117777f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6116e7565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516117e29190612767565b5f60405180830381855af49150503d805f811461181a576040519150601f19603f3d011682016040523d82523d5f602084013e61181f565b606091505b509150915061182f858383611875565b9250505092915050565b5f341115611873576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60608261188a5761188582611902565b6118fa565b5f82511480156118b057505f8473ffffffffffffffffffffffffffffffffffffffff163b145b156118f257836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016118e991906123a9565b60405180910390fd5b8190506118fb565b5b9392505050565b5f815111156119145780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180608001604052805f80191681526020015f81526020015f8019168152602001606081525090565b60405180608001604052805f80191681526020015f81526020015f8019168152602001606081525090565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156119d35780820151818401526020810190506119b8565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6119f88261199c565b611a0281856119a6565b9350611a128185602086016119b6565b611a1b816119de565b840191505092915050565b5f6020820190508181035f830152611a3e81846119ee565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b611a6981611a57565b8114611a73575f80fd5b50565b5f81359050611a8481611a60565b92915050565b5f60208284031215611a9f57611a9e611a4f565b5b5f611aac84828501611a76565b91505092915050565b5f8115159050919050565b611ac981611ab5565b82525050565b5f602082019050611ae25f830184611ac0565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611b1182611ae8565b9050919050565b611b2181611b07565b8114611b2b575f80fd5b50565b5f81359050611b3c81611b18565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611b80826119de565b810181811067ffffffffffffffff82111715611b9f57611b9e611b4a565b5b80604052505050565b5f611bb1611a46565b9050611bbd8282611b77565b919050565b5f67ffffffffffffffff821115611bdc57611bdb611b4a565b5b611be5826119de565b9050602081019050919050565b828183375f83830152505050565b5f611c12611c0d84611bc2565b611ba8565b905082815260208101848484011115611c2e57611c2d611b46565b5b611c39848285611bf2565b509392505050565b5f82601f830112611c5557611c54611b42565b5b8135611c65848260208601611c00565b91505092915050565b5f8060408385031215611c8457611c83611a4f565b5b5f611c9185828601611b2e565b925050602083013567ffffffffffffffff811115611cb257611cb1611a53565b5b611cbe85828601611c41565b9150509250929050565b611cd181611a57565b82525050565b5f602082019050611cea5f830184611cc8565b92915050565b5f80fd5b5f80fd5b5f8083601f840112611d0d57611d0c611b42565b5b8235905067ffffffffffffffff811115611d2a57611d29611cf0565b5b602083019150836020820283011115611d4657611d45611cf4565b5b9250929050565b5f8060208385031215611d6357611d62611a4f565b5b5f83013567ffffffffffffffff811115611d8057611d7f611a53565b5b611d8c85828601611cf8565b92509250509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611dca81611a57565b82525050565b5f819050919050565b611de281611dd0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611e1a81611b07565b82525050565b5f611e2b8383611e11565b60208301905092915050565b5f602082019050919050565b5f611e4d82611de8565b611e578185611df2565b9350611e6283611e02565b805f5b83811015611e92578151611e798882611e20565b9750611e8483611e37565b925050600181019050611e65565b5085935050505092915050565b5f608083015f830151611eb45f860182611dc1565b506020830151611ec76020860182611dd9565b506040830151611eda6040860182611dc1565b5060608301518482036060860152611ef28282611e43565b9150508091505092915050565b5f611f0a8383611e9f565b905092915050565b5f602082019050919050565b5f611f2882611d98565b611f328185611da2565b935083602082028501611f4485611db2565b805f5b85811015611f7f5784840389528151611f608582611eff565b9450611f6b83611f12565b925060208a01995050600181019050611f47565b50829750879550505050505092915050565b5f6020820190508181035f830152611fa98184611f1e565b905092915050565b611fba81611dd0565b8114611fc4575f80fd5b50565b5f81359050611fd581611fb1565b92915050565b5f805f8060808587031215611ff357611ff2611a4f565b5b5f61200087828801611a76565b945050602061201187828801611fc7565b935050604061202287828801611a76565b925050606061203387828801611a76565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f608083015f83015161207d5f860182611dc1565b5060208301516120906020860182611dd9565b5060408301516120a36040860182611dc1565b50606083015184820360608601526120bb8282611e43565b9150508091505092915050565b5f6120d38383612068565b905092915050565b5f602082019050919050565b5f6120f18261203f565b6120fb8185612049565b93508360208202850161210d85612059565b805f5b85811015612148578484038952815161212985826120c8565b9450612134836120db565b925060208a01995050600181019050612110565b50829750879550505050505092915050565b5f6020820190508181035f83015261217281846120e7565b905092915050565b5f82825260208201905092915050565b5f61219482611de8565b61219e818561217a565b93506121a983611e02565b805f5b838110156121d95781516121c08882611e20565b97506121cb83611e37565b9250506001810190506121ac565b5085935050505092915050565b5f6020820190508181035f8301526121fe818461218a565b905092915050565b5f81905092915050565b5f61221a8261199c565b6122248185612206565b93506122348185602086016119b6565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f612274600283612206565b915061227f82612240565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6122be600183612206565b91506122c98261228a565b600182019050919050565b5f6122df8287612210565b91506122ea82612268565b91506122f68286612210565b9150612301826122b2565b915061230d8285612210565b9150612318826122b2565b91506123248284612210565b915081905095945050505050565b5f67ffffffffffffffff82169050919050565b61234e81612332565b82525050565b5f6020820190506123675f830184612345565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6123a381611b07565b82525050565b5f6020820190506123bc5f83018461239a565b92915050565b6123cb81611ab5565b81146123d5575f80fd5b50565b5f815190506123e6816123c2565b92915050565b5f6020828403121561240157612400611a4f565b5b5f61240e848285016123d8565b91505092915050565b61242081611dd0565b82525050565b5f6020820190506124395f830184612417565b92915050565b5f6040820190506124525f830185611cc8565b61245f602083018461239a565b9392505050565b5f6080820190506124795f830187611cc8565b6124866020830186612417565b6124936040830185611cc8565b6124a06060830184611cc8565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6124e082611dd0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612512576125116124a9565b5b600182019050919050565b5f81549050919050565b5f819050815f5260205f209050919050565b5f815f1c9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61257561257083612539565b612544565b9050919050565b5f6125878254612563565b9050919050565b5f600182019050919050565b5f6125a48261251d565b6125ae818561217a565b93506125b983612527565b805f5b838110156125f0576125cd8261257c565b6125d78882611e20565b97506125e28361258e565b9250506001810190506125bc565b5085935050505092915050565b5f6060820190506126105f830186611cc8565b61261d6020830185611cc8565b818103604083015261262f818461259a565b9050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8151905061267481611b18565b92915050565b5f6020828403121561268f5761268e611a4f565b5b5f61269c84828501612666565b91505092915050565b5f815190506126b381611a60565b92915050565b5f602082840312156126ce576126cd611a4f565b5b5f6126db848285016126a5565b91505092915050565b5f815190506126f281611fb1565b92915050565b5f6020828403121561270d5761270c611a4f565b5b5f61271a848285016126e4565b91505092915050565b5f81519050919050565b5f81905092915050565b5f61274182612723565b61274b818561272d565b935061275b8185602086016119b6565b80840191505092915050565b5f6127728284612737565b91508190509291505056 + ///0x608060405260043610610090575f3560e01c806355c4d9971161005857806355c4d9971461015657806390f3035414610192578063a14f8971146101ba578063ad3cb1cc146101f6578063e6f6ab941461022057610090565b80630d8e6e2c146100945780632ddc9a6f146100be57806339f73810146100fa5780634f1ef2861461011057806352d1902d1461012c575b5f80fd5b34801561009f575f80fd5b506100a861025c565b6040516100b59190611a5a565b60405180910390f35b3480156100c9575f80fd5b506100e460048036038101906100df9190611abe565b6102d7565b6040516100f19190611b03565b60405180910390f35b348015610105575f80fd5b5061010e61030b565b005b61012a60048036038101906101259190611ca2565b61047b565b005b348015610137575f80fd5b5061014061049a565b60405161014d9190611d0b565b60405180910390f35b348015610161575f80fd5b5061017c60048036038101906101779190611d81565b6104cb565b6040516101899190611fc5565b60405180910390f35b34801561019d575f80fd5b506101b860048036038101906101b3919061200f565b610748565b005b3480156101c5575f80fd5b506101e060048036038101906101db9190611d81565b610c29565b6040516101ed919061218e565b60405180910390f35b348015610201575f80fd5b5061020a610ea6565b6040516102179190611a5a565b60405180910390f35b34801561022b575f80fd5b5061024660048036038101906102419190611abe565b610edf565b604051610253919061221a565b60405180910390f35b60606040518060400160405280601181526020017f43697068657274657874436f6d6d69747300000000000000000000000000000081525061029d5f610fa1565b6102a76001610fa1565b6102b05f610fa1565b6040516020016102c39493929190612308565b604051602081830303815290604052905090565b5f806102e161106b565b9050806003015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b6001610315611092565b67ffffffffffffffff1614610356576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f6103616110b6565b9050805f0160089054906101000a900460ff16806103a957508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b156103e0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff0219169083151502179055505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d28260405161046f9190612388565b60405180910390a15050565b6104836110dd565b61048c826111c3565b61049682826112b6565b5050565b5f6104a36113d4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b60605f6104d661106b565b90508383905067ffffffffffffffff8111156104f5576104f4611b7e565b5b60405190808252806020026020018201604052801561052e57816020015b61051b61197a565b8152602001906001900390816105135790505b5091505f5b8484905081101561074057610560858583818110610554576105536123a1565b5b905060200201356102d7565b6105ba57848482818110610577576105766123a1565b5b905060200201356040517f0666cbdf0000000000000000000000000000000000000000000000000000000081526004016105b19190611d0b565b60405180910390fd5b5f826005015f8787858181106105d3576105d26123a1565b5b9050602002013581526020019081526020015f205490505f836007015f8381526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561067b57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610632575b5050505050905060405180608001604052808888868181106106a05761069f6123a1565b5b905060200201358152602001855f015f8a8a888181106106c3576106c26123a1565b5b9050602002013581526020019081526020015f20548152602001856001015f8a8a888181106106f5576106f46123a1565b5b9050602002013581526020019081526020015f2054815260200182815250858481518110610726576107256123a1565b5b602002602001018190525050508080600101915050610533565b505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b815260040161079591906123dd565b602060405180830381865afa1580156107b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d49190612420565b61081557336040517f52d725f500000000000000000000000000000000000000000000000000000000815260040161080c91906123dd565b60405180910390fd5b835f6108208261145b565b905073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663bff3aaba826040518263ffffffff1660e01b815260040161086f919061245a565b602060405180830381865afa15801561088a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ae9190612420565b6108ef57806040517fb6679c3b0000000000000000000000000000000000000000000000000000000081526004016108e6919061245a565b60405180910390fd5b5f6108f861106b565b9050806006015f8881526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156109995786336040517f1dd7250c000000000000000000000000000000000000000000000000000000008152600401610990929190612473565b60405180910390fd5b5f878787876040516020016109b1949392919061249a565b604051602081830303815290604052805190602001209050816004015f8281526020019081526020015f205f8154809291906109ec9061250a565b91905055505f826008015f8381526020019081526020015f205403610a25576001826008015f8381526020019081526020015f20819055505b6001826006015f8a81526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550816007015f8281526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816003015f8981526020019081526020015f205f9054906101000a900460ff16158015610b415750610b40826004015f8381526020019081526020015f2054611474565b5b15610c1f5785826001015f8a81526020019081526020015f208190555084826002015f8a81526020019081526020015f208190555086825f015f8a81526020019081526020015f20819055506001826003015f8a81526020019081526020015f205f6101000a81548160ff02191690831515021790555080826005015f8a81526020019081526020015f2081905550877fcb89ccb347018d7f282bb4c048e135e19bc1d13660fa0f2850e10518422536de8787856007015f8681526020019081526020015f20604051610c1693929190612631565b60405180910390a25b5050505050505050565b60605f610c3461106b565b90508383905067ffffffffffffffff811115610c5357610c52611b7e565b5b604051908082528060200260200182016040528015610c8c57816020015b610c796119a5565b815260200190600190039081610c715790505b5091505f5b84849050811015610e9e57610cbe858583818110610cb257610cb16123a1565b5b905060200201356102d7565b610d1857848482818110610cd557610cd46123a1565b5b905060200201356040517f0666cbdf000000000000000000000000000000000000000000000000000000008152600401610d0f9190611d0b565b60405180910390fd5b5f826005015f878785818110610d3157610d306123a1565b5b9050602002013581526020019081526020015f205490505f836007015f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610dd957602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610d90575b505050505090506040518060800160405280888886818110610dfe57610dfd6123a1565b5b905060200201358152602001855f015f8a8a88818110610e2157610e206123a1565b5b9050602002013581526020019081526020015f20548152602001856002015f8a8a88818110610e5357610e526123a1565b5b9050602002013581526020019081526020015f2054815260200182815250858481518110610e8457610e836123a1565b5b602002602001018190525050508080600101915050610c91565b505092915050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60605f610eea61106b565b90505f816005015f8581526020019081526020015f20549050816007015f8281526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610f9357602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f4a575b505050505092505050919050565b60605f6001610faf84611505565b0190505f8167ffffffffffffffff811115610fcd57610fcc611b7e565b5b6040519080825280601f01601f191660200182016040528015610fff5781602001600182028036833780820191505090505b5090505f82602001820190505b600115611060578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816110555761105461266d565b5b0494505f850361100c575b819350505050919050565b5f7ff41c60ea5b83c8f19b663613ffdd3fa441a59933b8a4fdf4da891b38433d1a00905090565b5f61109b6110b6565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061118a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611171611656565b73ffffffffffffffffffffffffffffffffffffffff1614155b156111c1576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611220573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124491906126ae565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112b357336040517f0e56cf3d0000000000000000000000000000000000000000000000000000000081526004016112aa91906123dd565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561131e57506040513d601f19601f8201168201806040525081019061131b91906126ed565b60015b61135f57816040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161135691906123dd565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b81146113c557806040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004016113bc9190611d0b565b60405180910390fd5b6113cf83836116a9565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611459576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f67ffffffffffffffff6010835f1c901c169050919050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16636799ef526040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f7919061272c565b905080831015915050919050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611561577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816115575761155661266d565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061159e576d04ee2d6d415b85acef810000000083816115945761159361266d565b5b0492506020810190505b662386f26fc1000083106115cd57662386f26fc1000083816115c3576115c261266d565b5b0492506010810190505b6305f5e10083106115f6576305f5e10083816115ec576115eb61266d565b5b0492506008810190505b612710831061161b5761271083816116115761161061266d565b5b0492506004810190505b6064831061163e57606483816116345761163361266d565b5b0492506002810190505b600a831061164d576001810190505b80915050919050565b5f6116827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b61171b565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116b282611724565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f8151111561170e5761170882826117ed565b50611717565b61171661186d565b5b5050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361177f57806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161177691906123dd565b60405180910390fd5b806117ab7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b61171b565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff1684604051611816919061279b565b5f60405180830381855af49150503d805f811461184e576040519150601f19603f3d011682016040523d82523d5f602084013e611853565b606091505b50915091506118638583836118a9565b9250505092915050565b5f3411156118a7576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060826118be576118b982611936565b61192e565b5f82511480156118e457505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561192657836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161191d91906123dd565b60405180910390fd5b81905061192f565b5b9392505050565b5f815111156119485780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180608001604052805f80191681526020015f81526020015f8019168152602001606081525090565b60405180608001604052805f80191681526020015f81526020015f8019168152602001606081525090565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611a075780820151818401526020810190506119ec565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611a2c826119d0565b611a3681856119da565b9350611a468185602086016119ea565b611a4f81611a12565b840191505092915050565b5f6020820190508181035f830152611a728184611a22565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b611a9d81611a8b565b8114611aa7575f80fd5b50565b5f81359050611ab881611a94565b92915050565b5f60208284031215611ad357611ad2611a83565b5b5f611ae084828501611aaa565b91505092915050565b5f8115159050919050565b611afd81611ae9565b82525050565b5f602082019050611b165f830184611af4565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611b4582611b1c565b9050919050565b611b5581611b3b565b8114611b5f575f80fd5b50565b5f81359050611b7081611b4c565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611bb482611a12565b810181811067ffffffffffffffff82111715611bd357611bd2611b7e565b5b80604052505050565b5f611be5611a7a565b9050611bf18282611bab565b919050565b5f67ffffffffffffffff821115611c1057611c0f611b7e565b5b611c1982611a12565b9050602081019050919050565b828183375f83830152505050565b5f611c46611c4184611bf6565b611bdc565b905082815260208101848484011115611c6257611c61611b7a565b5b611c6d848285611c26565b509392505050565b5f82601f830112611c8957611c88611b76565b5b8135611c99848260208601611c34565b91505092915050565b5f8060408385031215611cb857611cb7611a83565b5b5f611cc585828601611b62565b925050602083013567ffffffffffffffff811115611ce657611ce5611a87565b5b611cf285828601611c75565b9150509250929050565b611d0581611a8b565b82525050565b5f602082019050611d1e5f830184611cfc565b92915050565b5f80fd5b5f80fd5b5f8083601f840112611d4157611d40611b76565b5b8235905067ffffffffffffffff811115611d5e57611d5d611d24565b5b602083019150836020820283011115611d7a57611d79611d28565b5b9250929050565b5f8060208385031215611d9757611d96611a83565b5b5f83013567ffffffffffffffff811115611db457611db3611a87565b5b611dc085828601611d2c565b92509250509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611dfe81611a8b565b82525050565b5f819050919050565b611e1681611e04565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611e4e81611b3b565b82525050565b5f611e5f8383611e45565b60208301905092915050565b5f602082019050919050565b5f611e8182611e1c565b611e8b8185611e26565b9350611e9683611e36565b805f5b83811015611ec6578151611ead8882611e54565b9750611eb883611e6b565b925050600181019050611e99565b5085935050505092915050565b5f608083015f830151611ee85f860182611df5565b506020830151611efb6020860182611e0d565b506040830151611f0e6040860182611df5565b5060608301518482036060860152611f268282611e77565b9150508091505092915050565b5f611f3e8383611ed3565b905092915050565b5f602082019050919050565b5f611f5c82611dcc565b611f668185611dd6565b935083602082028501611f7885611de6565b805f5b85811015611fb35784840389528151611f948582611f33565b9450611f9f83611f46565b925060208a01995050600181019050611f7b565b50829750879550505050505092915050565b5f6020820190508181035f830152611fdd8184611f52565b905092915050565b611fee81611e04565b8114611ff8575f80fd5b50565b5f8135905061200981611fe5565b92915050565b5f805f806080858703121561202757612026611a83565b5b5f61203487828801611aaa565b945050602061204587828801611ffb565b935050604061205687828801611aaa565b925050606061206787828801611aaa565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f608083015f8301516120b15f860182611df5565b5060208301516120c46020860182611e0d565b5060408301516120d76040860182611df5565b50606083015184820360608601526120ef8282611e77565b9150508091505092915050565b5f612107838361209c565b905092915050565b5f602082019050919050565b5f61212582612073565b61212f818561207d565b9350836020820285016121418561208d565b805f5b8581101561217c578484038952815161215d85826120fc565b94506121688361210f565b925060208a01995050600181019050612144565b50829750879550505050505092915050565b5f6020820190508181035f8301526121a6818461211b565b905092915050565b5f82825260208201905092915050565b5f6121c882611e1c565b6121d281856121ae565b93506121dd83611e36565b805f5b8381101561220d5781516121f48882611e54565b97506121ff83611e6b565b9250506001810190506121e0565b5085935050505092915050565b5f6020820190508181035f83015261223281846121be565b905092915050565b5f81905092915050565b5f61224e826119d0565b612258818561223a565b93506122688185602086016119ea565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f6122a860028361223a565b91506122b382612274565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6122f260018361223a565b91506122fd826122be565b600182019050919050565b5f6123138287612244565b915061231e8261229c565b915061232a8286612244565b9150612335826122e6565b91506123418285612244565b915061234c826122e6565b91506123588284612244565b915081905095945050505050565b5f67ffffffffffffffff82169050919050565b61238281612366565b82525050565b5f60208201905061239b5f830184612379565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6123d781611b3b565b82525050565b5f6020820190506123f05f8301846123ce565b92915050565b6123ff81611ae9565b8114612409575f80fd5b50565b5f8151905061241a816123f6565b92915050565b5f6020828403121561243557612434611a83565b5b5f6124428482850161240c565b91505092915050565b61245481611e04565b82525050565b5f60208201905061246d5f83018461244b565b92915050565b5f6040820190506124865f830185611cfc565b61249360208301846123ce565b9392505050565b5f6080820190506124ad5f830187611cfc565b6124ba602083018661244b565b6124c76040830185611cfc565b6124d46060830184611cfc565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61251482611e04565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612546576125456124dd565b5b600182019050919050565b5f81549050919050565b5f819050815f5260205f209050919050565b5f815f1c9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6125a96125a48361256d565b612578565b9050919050565b5f6125bb8254612597565b9050919050565b5f600182019050919050565b5f6125d882612551565b6125e281856121ae565b93506125ed8361255b565b805f5b8381101561262457612601826125b0565b61260b8882611e54565b9750612616836125c2565b9250506001810190506125f0565b5085935050505092915050565b5f6060820190506126445f830186611cfc565b6126516020830185611cfc565b818103604083015261266381846125ce565b9050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f815190506126a881611b4c565b92915050565b5f602082840312156126c3576126c2611a83565b5b5f6126d08482850161269a565b91505092915050565b5f815190506126e781611a94565b92915050565b5f6020828403121561270257612701611a83565b5b5f61270f848285016126d9565b91505092915050565b5f8151905061272681611fe5565b92915050565b5f6020828403121561274157612740611a83565b5b5f61274e84828501612718565b91505092915050565b5f81519050919050565b5f81905092915050565b5f61277582612757565b61277f8185612761565b935061278f8185602086016119ea565b80840191505092915050565b5f6127a6828461276b565b91508190509291505056 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80`@R`\x046\x10a\0\x90W_5`\xE0\x1C\x80cU\xC4\xD9\x97\x11a\0XW\x80cU\xC4\xD9\x97\x14a\x01VW\x80c\x90\xF3\x03T\x14a\x01\x92W\x80c\xA1O\x89q\x14a\x01\xBAW\x80c\xAD<\xB1\xCC\x14a\x01\xF6W\x80c\xE6\xF6\xAB\x94\x14a\x02 Wa\0\x90V[\x80c\r\x8En,\x14a\0\x94W\x80c-\xDC\x9Ao\x14a\0\xBEW\x80c9\xF78\x10\x14a\0\xFAW\x80cO\x1E\xF2\x86\x14a\x01\x10W\x80cR\xD1\x90-\x14a\x01,W[_\x80\xFD[4\x80\x15a\0\x9FW_\x80\xFD[Pa\0\xA8a\x02\\V[`@Qa\0\xB5\x91\x90a\x1A&V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\0\xC9W_\x80\xFD[Pa\0\xE4`\x04\x806\x03\x81\x01\x90a\0\xDF\x91\x90a\x1A\x8AV[a\x02\xD7V[`@Qa\0\xF1\x91\x90a\x1A\xCFV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x05W_\x80\xFD[Pa\x01\x0Ea\x03\x0BV[\0[a\x01*`\x04\x806\x03\x81\x01\x90a\x01%\x91\x90a\x1CnV[a\x04{V[\0[4\x80\x15a\x017W_\x80\xFD[Pa\x01@a\x04\x9AV[`@Qa\x01M\x91\x90a\x1C\xD7V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01aW_\x80\xFD[Pa\x01|`\x04\x806\x03\x81\x01\x90a\x01w\x91\x90a\x1DMV[a\x04\xCBV[`@Qa\x01\x89\x91\x90a\x1F\x91V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x9DW_\x80\xFD[Pa\x01\xB8`\x04\x806\x03\x81\x01\x90a\x01\xB3\x91\x90a\x1F\xDBV[a\x07HV[\0[4\x80\x15a\x01\xC5W_\x80\xFD[Pa\x01\xE0`\x04\x806\x03\x81\x01\x90a\x01\xDB\x91\x90a\x1DMV[a\x0B\xF5V[`@Qa\x01\xED\x91\x90a!ZV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\x01W_\x80\xFD[Pa\x02\na\x0ErV[`@Qa\x02\x17\x91\x90a\x1A&V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02+W_\x80\xFD[Pa\x02F`\x04\x806\x03\x81\x01\x90a\x02A\x91\x90a\x1A\x8AV[a\x0E\xABV[`@Qa\x02S\x91\x90a!\xE6V[`@Q\x80\x91\x03\x90\xF3[```@Q\x80`@\x01`@R\x80`\x11\x81R` \x01\x7FCiphertextCommits\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RPa\x02\x9D_a\x0FmV[a\x02\xA7`\x01a\x0FmV[a\x02\xB0_a\x0FmV[`@Q` \x01a\x02\xC3\x94\x93\x92\x91\x90a\"\xD4V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x90V[_\x80a\x02\xE1a\x107V[\x90P\x80`\x03\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[`\x01a\x03\x15a\x10^V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x03VW`@Q\x7FoOs\x1F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02_a\x03aa\x10\x82V[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x80a\x03\xA9WP\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x15[\x15a\x03\xE0W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`\x01\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x82`@Qa\x04o\x91\x90a#TV[`@Q\x80\x91\x03\x90\xA1PPV[a\x04\x83a\x10\xA9V[a\x04\x8C\x82a\x11\x8FV[a\x04\x96\x82\x82a\x12\x82V[PPV[_a\x04\xA3a\x13\xA0V[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[``_a\x04\xD6a\x107V[\x90P\x83\x83\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x04\xF5Wa\x04\xF4a\x1BJV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x05.W\x81` \x01[a\x05\x1Ba\x19FV[\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x05\x13W\x90P[P\x91P_[\x84\x84\x90P\x81\x10\x15a\x07@Wa\x05`\x85\x85\x83\x81\x81\x10a\x05TWa\x05Sa#mV[[\x90P` \x02\x015a\x02\xD7V[a\x05\xBAW\x84\x84\x82\x81\x81\x10a\x05wWa\x05va#mV[[\x90P` \x02\x015`@Q\x7F\x06f\xCB\xDF\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\x81R`\x04\x01a\x05\xB1\x91\x90a\x1C\xD7V[`@Q\x80\x91\x03\x90\xFD[_\x82`\x05\x01_\x87\x87\x85\x81\x81\x10a\x05\xD3Wa\x05\xD2a#mV[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x90P_\x83`\x07\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x06{W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x062W[PPPPP\x90P`@Q\x80`\x80\x01`@R\x80\x88\x88\x86\x81\x81\x10a\x06\xA0Wa\x06\x9Fa#mV[[\x90P` \x02\x015\x81R` \x01\x85_\x01_\x8A\x8A\x88\x81\x81\x10a\x06\xC3Wa\x06\xC2a#mV[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x81R` \x01\x85`\x01\x01_\x8A\x8A\x88\x81\x81\x10a\x06\xF5Wa\x06\xF4a#mV[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x81R` \x01\x82\x81RP\x85\x84\x81Q\x81\x10a\x07&Wa\x07%a#mV[[` \x02` \x01\x01\x81\x90RPPP\x80\x80`\x01\x01\x91PPa\x053V[PP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x07\x95\x91\x90a#\xA9V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\xB0W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xD4\x91\x90a#\xECV[a\x08\x15W3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x08\x0C\x91\x90a#\xA9V[`@Q\x80\x91\x03\x90\xFD[\x83_a\x08 \x82a\x14'V[\x90Ps\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xBF\xF3\xAA\xBA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x08o\x91\x90a$&V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x08\x8AW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08\xAE\x91\x90a#\xECV[a\x08\xEFW\x80`@Q\x7F\xB6g\x9C;\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\x81R`\x04\x01a\x08\xE6\x91\x90a$&V[`@Q\x80\x91\x03\x90\xFD[_a\x08\xF8a\x107V[\x90P\x80`\x06\x01_\x88\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\t\x99W\x863`@Q\x7F\x1D\xD7%\x0C\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\x81R`\x04\x01a\t\x90\x92\x91\x90a$?V[`@Q\x80\x91\x03\x90\xFD[_\x87\x87\x87\x87`@Q` \x01a\t\xB1\x94\x93\x92\x91\x90a$fV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x81`\x04\x01_\x82\x81R` \x01\x90\x81R` \x01_ _\x81T\x80\x92\x91\x90a\t\xEC\x90a$\xD6V[\x91\x90PUP`\x01\x82`\x06\x01_\x8A\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x81`\x07\x01_\x82\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x81`\x03\x01_\x89\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x0B\rWPa\x0B\x0C\x82`\x04\x01_\x83\x81R` \x01\x90\x81R` \x01_ Ta\x14@V[[\x15a\x0B\xEBW\x85\x82`\x01\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x84\x82`\x02\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x86\x82_\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x81\x90UP`\x01\x82`\x03\x01_\x8A\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x80\x82`\x05\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x87\x7F\xCB\x89\xCC\xB3G\x01\x8D\x7F(+\xB4\xC0H\xE15\xE1\x9B\xC1\xD16`\xFA\x0F(P\xE1\x05\x18B%6\xDE\x87\x87\x85`\x07\x01_\x86\x81R` \x01\x90\x81R` \x01_ `@Qa\x0B\xE2\x93\x92\x91\x90a%\xFDV[`@Q\x80\x91\x03\x90\xA2[PPPPPPPPV[``_a\x0C\0a\x107V[\x90P\x83\x83\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0C\x1FWa\x0C\x1Ea\x1BJV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x0CXW\x81` \x01[a\x0CEa\x19qV[\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x0C=W\x90P[P\x91P_[\x84\x84\x90P\x81\x10\x15a\x0EjWa\x0C\x8A\x85\x85\x83\x81\x81\x10a\x0C~Wa\x0C}a#mV[[\x90P` \x02\x015a\x02\xD7V[a\x0C\xE4W\x84\x84\x82\x81\x81\x10a\x0C\xA1Wa\x0C\xA0a#mV[[\x90P` \x02\x015`@Q\x7F\x06f\xCB\xDF\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\x81R`\x04\x01a\x0C\xDB\x91\x90a\x1C\xD7V[`@Q\x80\x91\x03\x90\xFD[_\x82`\x05\x01_\x87\x87\x85\x81\x81\x10a\x0C\xFDWa\x0C\xFCa#mV[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x90P_\x83`\x07\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\r\xA5W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\r\\W[PPPPP\x90P`@Q\x80`\x80\x01`@R\x80\x88\x88\x86\x81\x81\x10a\r\xCAWa\r\xC9a#mV[[\x90P` \x02\x015\x81R` \x01\x85_\x01_\x8A\x8A\x88\x81\x81\x10a\r\xEDWa\r\xECa#mV[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x81R` \x01\x85`\x02\x01_\x8A\x8A\x88\x81\x81\x10a\x0E\x1FWa\x0E\x1Ea#mV[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x81R` \x01\x82\x81RP\x85\x84\x81Q\x81\x10a\x0EPWa\x0EOa#mV[[` \x02` \x01\x01\x81\x90RPPP\x80\x80`\x01\x01\x91PPa\x0C]V[PP\x92\x91PPV[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[``_a\x0E\xB6a\x107V[\x90P_\x81`\x05\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x07\x01_\x82\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x0F_W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x0F\x16W[PPPPP\x92PPP\x91\x90PV[``_`\x01a\x0F{\x84a\x14\xD1V[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0F\x99Wa\x0F\x98a\x1BJV[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0F\xCBW\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a\x10,W\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a\x10!Wa\x10 a&9V[[\x04\x94P_\x85\x03a\x0F\xD8W[\x81\x93PPPP\x91\x90PV[_\x7F\xF4\x1C`\xEA[\x83\xC8\xF1\x9Bf6\x13\xFF\xDD?\xA4A\xA5\x993\xB8\xA4\xFD\xF4\xDA\x89\x1B8C=\x1A\0\x90P\x90V[_a\x10ga\x10\x82V[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a\x11VWP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x11=a\x16\"V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x11\x8DW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11\xECW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x12\x10\x91\x90a&zV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x12\x7FW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\x12v\x91\x90a#\xA9V[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a\x12\xEAWP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x12\xE7\x91\x90a&\xB9V[`\x01[a\x13+W\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x13\"\x91\x90a#\xA9V[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a\x13\x91W\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a\x13\x88\x91\x90a\x1C\xD7V[`@Q\x80\x91\x03\x90\xFD[a\x13\x9B\x83\x83a\x16uV[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x14%W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x10\x83_\x1C\x90\x1C\x16\x90P\x91\x90PV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cg\x99\xEFR`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x14\x9FW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x14\xC3\x91\x90a&\xF8V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a\x15-Wz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a\x15#Wa\x15\"a&9V[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x15jWm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a\x15`Wa\x15_a&9V[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a\x15\x99Wf#\x86\xF2o\xC1\0\0\x83\x81a\x15\x8FWa\x15\x8Ea&9V[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a\x15\xC2Wc\x05\xF5\xE1\0\x83\x81a\x15\xB8Wa\x15\xB7a&9V[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a\x15\xE7Wa'\x10\x83\x81a\x15\xDDWa\x15\xDCa&9V[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a\x16\nW`d\x83\x81a\x16\0Wa\x15\xFFa&9V[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a\x16\x19W`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[_a\x16N\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba\x16\xE7V[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a\x16~\x82a\x16\xF0V[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a\x16\xDAWa\x16\xD4\x82\x82a\x17\xB9V[Pa\x16\xE3V[a\x16\xE2a\x189V[[PPV[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a\x17KW\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x17B\x91\x90a#\xA9V[`@Q\x80\x91\x03\x90\xFD[\x80a\x17w\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba\x16\xE7V[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa\x17\xE2\x91\x90a'gV[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a\x18\x1AW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a\x18\x1FV[``\x91P[P\x91P\x91Pa\x18/\x85\x83\x83a\x18uV[\x92PPP\x92\x91PPV[_4\x11\x15a\x18sW`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[``\x82a\x18\x8AWa\x18\x85\x82a\x19\x02V[a\x18\xFAV[_\x82Q\x14\x80\x15a\x18\xB0WP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a\x18\xF2W\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a\x18\xE9\x91\x90a#\xA9V[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa\x18\xFBV[[\x93\x92PPPV[_\x81Q\x11\x15a\x19\x14W\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x80`\x80\x01`@R\x80_\x80\x19\x16\x81R` \x01_\x81R` \x01_\x80\x19\x16\x81R` \x01``\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80_\x80\x19\x16\x81R` \x01_\x81R` \x01_\x80\x19\x16\x81R` \x01``\x81RP\x90V[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15a\x19\xD3W\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa\x19\xB8V[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a\x19\xF8\x82a\x19\x9CV[a\x1A\x02\x81\x85a\x19\xA6V[\x93Pa\x1A\x12\x81\x85` \x86\x01a\x19\xB6V[a\x1A\x1B\x81a\x19\xDEV[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x1A>\x81\x84a\x19\xEEV[\x90P\x92\x91PPV[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[a\x1Ai\x81a\x1AWV[\x81\x14a\x1AsW_\x80\xFD[PV[_\x815\x90Pa\x1A\x84\x81a\x1A`V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x1A\x9FWa\x1A\x9Ea\x1AOV[[_a\x1A\xAC\x84\x82\x85\x01a\x1AvV[\x91PP\x92\x91PPV[_\x81\x15\x15\x90P\x91\x90PV[a\x1A\xC9\x81a\x1A\xB5V[\x82RPPV[_` \x82\x01\x90Pa\x1A\xE2_\x83\x01\x84a\x1A\xC0V[\x92\x91PPV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a\x1B\x11\x82a\x1A\xE8V[\x90P\x91\x90PV[a\x1B!\x81a\x1B\x07V[\x81\x14a\x1B+W_\x80\xFD[PV[_\x815\x90Pa\x1B<\x81a\x1B\x18V[\x92\x91PPV[_\x80\xFD[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[a\x1B\x80\x82a\x19\xDEV[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1B\x9FWa\x1B\x9Ea\x1BJV[[\x80`@RPPPV[_a\x1B\xB1a\x1AFV[\x90Pa\x1B\xBD\x82\x82a\x1BwV[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a\x1B\xDCWa\x1B\xDBa\x1BJV[[a\x1B\xE5\x82a\x19\xDEV[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_a\x1C\x12a\x1C\r\x84a\x1B\xC2V[a\x1B\xA8V[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15a\x1C.Wa\x1C-a\x1BFV[[a\x1C9\x84\x82\x85a\x1B\xF2V[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12a\x1CUWa\x1CTa\x1BBV[[\x815a\x1Ce\x84\x82` \x86\x01a\x1C\0V[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a\x1C\x84Wa\x1C\x83a\x1AOV[[_a\x1C\x91\x85\x82\x86\x01a\x1B.V[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1C\xB2Wa\x1C\xB1a\x1ASV[[a\x1C\xBE\x85\x82\x86\x01a\x1CAV[\x91PP\x92P\x92\x90PV[a\x1C\xD1\x81a\x1AWV[\x82RPPV[_` \x82\x01\x90Pa\x1C\xEA_\x83\x01\x84a\x1C\xC8V[\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12a\x1D\rWa\x1D\x0Ca\x1BBV[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1D*Wa\x1D)a\x1C\xF0V[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15a\x1DFWa\x1DEa\x1C\xF4V[[\x92P\x92\x90PV[_\x80` \x83\x85\x03\x12\x15a\x1DcWa\x1Dba\x1AOV[[_\x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1D\x80Wa\x1D\x7Fa\x1ASV[[a\x1D\x8C\x85\x82\x86\x01a\x1C\xF8V[\x92P\x92PP\x92P\x92\x90PV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a\x1D\xCA\x81a\x1AWV[\x82RPPV[_\x81\x90P\x91\x90PV[a\x1D\xE2\x81a\x1D\xD0V[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a\x1E\x1A\x81a\x1B\x07V[\x82RPPV[_a\x1E+\x83\x83a\x1E\x11V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a\x1EM\x82a\x1D\xE8V[a\x1EW\x81\x85a\x1D\xF2V[\x93Pa\x1Eb\x83a\x1E\x02V[\x80_[\x83\x81\x10\x15a\x1E\x92W\x81Qa\x1Ey\x88\x82a\x1E V[\x97Pa\x1E\x84\x83a\x1E7V[\x92PP`\x01\x81\x01\x90Pa\x1EeV[P\x85\x93PPPP\x92\x91PPV[_`\x80\x83\x01_\x83\x01Qa\x1E\xB4_\x86\x01\x82a\x1D\xC1V[P` \x83\x01Qa\x1E\xC7` \x86\x01\x82a\x1D\xD9V[P`@\x83\x01Qa\x1E\xDA`@\x86\x01\x82a\x1D\xC1V[P``\x83\x01Q\x84\x82\x03``\x86\x01Ra\x1E\xF2\x82\x82a\x1ECV[\x91PP\x80\x91PP\x92\x91PPV[_a\x1F\n\x83\x83a\x1E\x9FV[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a\x1F(\x82a\x1D\x98V[a\x1F2\x81\x85a\x1D\xA2V[\x93P\x83` \x82\x02\x85\x01a\x1FD\x85a\x1D\xB2V[\x80_[\x85\x81\x10\x15a\x1F\x7FW\x84\x84\x03\x89R\x81Qa\x1F`\x85\x82a\x1E\xFFV[\x94Pa\x1Fk\x83a\x1F\x12V[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90Pa\x1FGV[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x1F\xA9\x81\x84a\x1F\x1EV[\x90P\x92\x91PPV[a\x1F\xBA\x81a\x1D\xD0V[\x81\x14a\x1F\xC4W_\x80\xFD[PV[_\x815\x90Pa\x1F\xD5\x81a\x1F\xB1V[\x92\x91PPV[_\x80_\x80`\x80\x85\x87\x03\x12\x15a\x1F\xF3Wa\x1F\xF2a\x1AOV[[_a \0\x87\x82\x88\x01a\x1AvV[\x94PP` a \x11\x87\x82\x88\x01a\x1F\xC7V[\x93PP`@a \"\x87\x82\x88\x01a\x1AvV[\x92PP``a 3\x87\x82\x88\x01a\x1AvV[\x91PP\x92\x95\x91\x94P\x92PV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_`\x80\x83\x01_\x83\x01Qa }_\x86\x01\x82a\x1D\xC1V[P` \x83\x01Qa \x90` \x86\x01\x82a\x1D\xD9V[P`@\x83\x01Qa \xA3`@\x86\x01\x82a\x1D\xC1V[P``\x83\x01Q\x84\x82\x03``\x86\x01Ra \xBB\x82\x82a\x1ECV[\x91PP\x80\x91PP\x92\x91PPV[_a \xD3\x83\x83a hV[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a \xF1\x82a ?V[a \xFB\x81\x85a IV[\x93P\x83` \x82\x02\x85\x01a!\r\x85a YV[\x80_[\x85\x81\x10\x15a!HW\x84\x84\x03\x89R\x81Qa!)\x85\x82a \xC8V[\x94Pa!4\x83a \xDBV[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90Pa!\x10V[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra!r\x81\x84a \xE7V[\x90P\x92\x91PPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_a!\x94\x82a\x1D\xE8V[a!\x9E\x81\x85a!zV[\x93Pa!\xA9\x83a\x1E\x02V[\x80_[\x83\x81\x10\x15a!\xD9W\x81Qa!\xC0\x88\x82a\x1E V[\x97Pa!\xCB\x83a\x1E7V[\x92PP`\x01\x81\x01\x90Pa!\xACV[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra!\xFE\x81\x84a!\x8AV[\x90P\x92\x91PPV[_\x81\x90P\x92\x91PPV[_a\"\x1A\x82a\x19\x9CV[a\"$\x81\x85a\"\x06V[\x93Pa\"4\x81\x85` \x86\x01a\x19\xB6V[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_a\"t`\x02\x83a\"\x06V[\x91Pa\"\x7F\x82a\"@V[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_a\"\xBE`\x01\x83a\"\x06V[\x91Pa\"\xC9\x82a\"\x8AV[`\x01\x82\x01\x90P\x91\x90PV[_a\"\xDF\x82\x87a\"\x10V[\x91Pa\"\xEA\x82a\"hV[\x91Pa\"\xF6\x82\x86a\"\x10V[\x91Pa#\x01\x82a\"\xB2V[\x91Pa#\r\x82\x85a\"\x10V[\x91Pa#\x18\x82a\"\xB2V[\x91Pa#$\x82\x84a\"\x10V[\x91P\x81\x90P\x95\x94PPPPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[a#N\x81a#2V[\x82RPPV[_` \x82\x01\x90Pa#g_\x83\x01\x84a#EV[\x92\x91PPV[\x7FNH{q\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_R`2`\x04R`$_\xFD[a#\xA3\x81a\x1B\x07V[\x82RPPV[_` \x82\x01\x90Pa#\xBC_\x83\x01\x84a#\x9AV[\x92\x91PPV[a#\xCB\x81a\x1A\xB5V[\x81\x14a#\xD5W_\x80\xFD[PV[_\x81Q\x90Pa#\xE6\x81a#\xC2V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a$\x01Wa$\0a\x1AOV[[_a$\x0E\x84\x82\x85\x01a#\xD8V[\x91PP\x92\x91PPV[a$ \x81a\x1D\xD0V[\x82RPPV[_` \x82\x01\x90Pa$9_\x83\x01\x84a$\x17V[\x92\x91PPV[_`@\x82\x01\x90Pa$R_\x83\x01\x85a\x1C\xC8V[a$_` \x83\x01\x84a#\x9AV[\x93\x92PPPV[_`\x80\x82\x01\x90Pa$y_\x83\x01\x87a\x1C\xC8V[a$\x86` \x83\x01\x86a$\x17V[a$\x93`@\x83\x01\x85a\x1C\xC8V[a$\xA0``\x83\x01\x84a\x1C\xC8V[\x95\x94PPPPPV[\x7FNH{q\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_R`\x11`\x04R`$_\xFD[_a$\xE0\x82a\x1D\xD0V[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03a%\x12Wa%\x11a$\xA9V[[`\x01\x82\x01\x90P\x91\x90PV[_\x81T\x90P\x91\x90PV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_\x81_\x1C\x90P\x91\x90PV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a%ua%p\x83a%9V[a%DV[\x90P\x91\x90PV[_a%\x87\x82Ta%cV[\x90P\x91\x90PV[_`\x01\x82\x01\x90P\x91\x90PV[_a%\xA4\x82a%\x1DV[a%\xAE\x81\x85a!zV[\x93Pa%\xB9\x83a%'V[\x80_[\x83\x81\x10\x15a%\xF0Wa%\xCD\x82a%|V[a%\xD7\x88\x82a\x1E V[\x97Pa%\xE2\x83a%\x8EV[\x92PP`\x01\x81\x01\x90Pa%\xBCV[P\x85\x93PPPP\x92\x91PPV[_``\x82\x01\x90Pa&\x10_\x83\x01\x86a\x1C\xC8V[a&\x1D` \x83\x01\x85a\x1C\xC8V[\x81\x81\x03`@\x83\x01Ra&/\x81\x84a%\x9AV[\x90P\x94\x93PPPPV[\x7FNH{q\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_R`\x12`\x04R`$_\xFD[_\x81Q\x90Pa&t\x81a\x1B\x18V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a&\x8FWa&\x8Ea\x1AOV[[_a&\x9C\x84\x82\x85\x01a&fV[\x91PP\x92\x91PPV[_\x81Q\x90Pa&\xB3\x81a\x1A`V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a&\xCEWa&\xCDa\x1AOV[[_a&\xDB\x84\x82\x85\x01a&\xA5V[\x91PP\x92\x91PPV[_\x81Q\x90Pa&\xF2\x81a\x1F\xB1V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a'\rWa'\x0Ca\x1AOV[[_a'\x1A\x84\x82\x85\x01a&\xE4V[\x91PP\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[_a'A\x82a'#V[a'K\x81\x85a'-V[\x93Pa'[\x81\x85` \x86\x01a\x19\xB6V[\x80\x84\x01\x91PP\x92\x91PPV[_a'r\x82\x84a'7V[\x91P\x81\x90P\x92\x91PPV", + b"`\x80`@R`\x046\x10a\0\x90W_5`\xE0\x1C\x80cU\xC4\xD9\x97\x11a\0XW\x80cU\xC4\xD9\x97\x14a\x01VW\x80c\x90\xF3\x03T\x14a\x01\x92W\x80c\xA1O\x89q\x14a\x01\xBAW\x80c\xAD<\xB1\xCC\x14a\x01\xF6W\x80c\xE6\xF6\xAB\x94\x14a\x02 Wa\0\x90V[\x80c\r\x8En,\x14a\0\x94W\x80c-\xDC\x9Ao\x14a\0\xBEW\x80c9\xF78\x10\x14a\0\xFAW\x80cO\x1E\xF2\x86\x14a\x01\x10W\x80cR\xD1\x90-\x14a\x01,W[_\x80\xFD[4\x80\x15a\0\x9FW_\x80\xFD[Pa\0\xA8a\x02\\V[`@Qa\0\xB5\x91\x90a\x1AZV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\0\xC9W_\x80\xFD[Pa\0\xE4`\x04\x806\x03\x81\x01\x90a\0\xDF\x91\x90a\x1A\xBEV[a\x02\xD7V[`@Qa\0\xF1\x91\x90a\x1B\x03V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x05W_\x80\xFD[Pa\x01\x0Ea\x03\x0BV[\0[a\x01*`\x04\x806\x03\x81\x01\x90a\x01%\x91\x90a\x1C\xA2V[a\x04{V[\0[4\x80\x15a\x017W_\x80\xFD[Pa\x01@a\x04\x9AV[`@Qa\x01M\x91\x90a\x1D\x0BV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01aW_\x80\xFD[Pa\x01|`\x04\x806\x03\x81\x01\x90a\x01w\x91\x90a\x1D\x81V[a\x04\xCBV[`@Qa\x01\x89\x91\x90a\x1F\xC5V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x9DW_\x80\xFD[Pa\x01\xB8`\x04\x806\x03\x81\x01\x90a\x01\xB3\x91\x90a \x0FV[a\x07HV[\0[4\x80\x15a\x01\xC5W_\x80\xFD[Pa\x01\xE0`\x04\x806\x03\x81\x01\x90a\x01\xDB\x91\x90a\x1D\x81V[a\x0C)V[`@Qa\x01\xED\x91\x90a!\x8EV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\x01W_\x80\xFD[Pa\x02\na\x0E\xA6V[`@Qa\x02\x17\x91\x90a\x1AZV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02+W_\x80\xFD[Pa\x02F`\x04\x806\x03\x81\x01\x90a\x02A\x91\x90a\x1A\xBEV[a\x0E\xDFV[`@Qa\x02S\x91\x90a\"\x1AV[`@Q\x80\x91\x03\x90\xF3[```@Q\x80`@\x01`@R\x80`\x11\x81R` \x01\x7FCiphertextCommits\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RPa\x02\x9D_a\x0F\xA1V[a\x02\xA7`\x01a\x0F\xA1V[a\x02\xB0_a\x0F\xA1V[`@Q` \x01a\x02\xC3\x94\x93\x92\x91\x90a#\x08V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x90V[_\x80a\x02\xE1a\x10kV[\x90P\x80`\x03\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[`\x01a\x03\x15a\x10\x92V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x03VW`@Q\x7FoOs\x1F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02_a\x03aa\x10\xB6V[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x80a\x03\xA9WP\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x15[\x15a\x03\xE0W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`\x01\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x82`@Qa\x04o\x91\x90a#\x88V[`@Q\x80\x91\x03\x90\xA1PPV[a\x04\x83a\x10\xDDV[a\x04\x8C\x82a\x11\xC3V[a\x04\x96\x82\x82a\x12\xB6V[PPV[_a\x04\xA3a\x13\xD4V[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[``_a\x04\xD6a\x10kV[\x90P\x83\x83\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x04\xF5Wa\x04\xF4a\x1B~V[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x05.W\x81` \x01[a\x05\x1Ba\x19zV[\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x05\x13W\x90P[P\x91P_[\x84\x84\x90P\x81\x10\x15a\x07@Wa\x05`\x85\x85\x83\x81\x81\x10a\x05TWa\x05Sa#\xA1V[[\x90P` \x02\x015a\x02\xD7V[a\x05\xBAW\x84\x84\x82\x81\x81\x10a\x05wWa\x05va#\xA1V[[\x90P` \x02\x015`@Q\x7F\x06f\xCB\xDF\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\x81R`\x04\x01a\x05\xB1\x91\x90a\x1D\x0BV[`@Q\x80\x91\x03\x90\xFD[_\x82`\x05\x01_\x87\x87\x85\x81\x81\x10a\x05\xD3Wa\x05\xD2a#\xA1V[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x90P_\x83`\x07\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x06{W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x062W[PPPPP\x90P`@Q\x80`\x80\x01`@R\x80\x88\x88\x86\x81\x81\x10a\x06\xA0Wa\x06\x9Fa#\xA1V[[\x90P` \x02\x015\x81R` \x01\x85_\x01_\x8A\x8A\x88\x81\x81\x10a\x06\xC3Wa\x06\xC2a#\xA1V[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x81R` \x01\x85`\x01\x01_\x8A\x8A\x88\x81\x81\x10a\x06\xF5Wa\x06\xF4a#\xA1V[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x81R` \x01\x82\x81RP\x85\x84\x81Q\x81\x10a\x07&Wa\x07%a#\xA1V[[` \x02` \x01\x01\x81\x90RPPP\x80\x80`\x01\x01\x91PPa\x053V[PP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x07\x95\x91\x90a#\xDDV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07\xB0W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\xD4\x91\x90a$ V[a\x08\x15W3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x08\x0C\x91\x90a#\xDDV[`@Q\x80\x91\x03\x90\xFD[\x83_a\x08 \x82a\x14[V[\x90Ps\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xBF\xF3\xAA\xBA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x08o\x91\x90a$ZV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x08\x8AW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08\xAE\x91\x90a$ V[a\x08\xEFW\x80`@Q\x7F\xB6g\x9C;\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\x81R`\x04\x01a\x08\xE6\x91\x90a$ZV[`@Q\x80\x91\x03\x90\xFD[_a\x08\xF8a\x10kV[\x90P\x80`\x06\x01_\x88\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\t\x99W\x863`@Q\x7F\x1D\xD7%\x0C\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\x81R`\x04\x01a\t\x90\x92\x91\x90a$sV[`@Q\x80\x91\x03\x90\xFD[_\x87\x87\x87\x87`@Q` \x01a\t\xB1\x94\x93\x92\x91\x90a$\x9AV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x81`\x04\x01_\x82\x81R` \x01\x90\x81R` \x01_ _\x81T\x80\x92\x91\x90a\t\xEC\x90a%\nV[\x91\x90PUP_\x82`\x08\x01_\x83\x81R` \x01\x90\x81R` \x01_ T\x03a\n%W`\x01\x82`\x08\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP[`\x01\x82`\x06\x01_\x8A\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x81`\x07\x01_\x82\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x81`\x03\x01_\x89\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x0BAWPa\x0B@\x82`\x04\x01_\x83\x81R` \x01\x90\x81R` \x01_ Ta\x14tV[[\x15a\x0C\x1FW\x85\x82`\x01\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x84\x82`\x02\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x86\x82_\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x81\x90UP`\x01\x82`\x03\x01_\x8A\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x80\x82`\x05\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x87\x7F\xCB\x89\xCC\xB3G\x01\x8D\x7F(+\xB4\xC0H\xE15\xE1\x9B\xC1\xD16`\xFA\x0F(P\xE1\x05\x18B%6\xDE\x87\x87\x85`\x07\x01_\x86\x81R` \x01\x90\x81R` \x01_ `@Qa\x0C\x16\x93\x92\x91\x90a&1V[`@Q\x80\x91\x03\x90\xA2[PPPPPPPPV[``_a\x0C4a\x10kV[\x90P\x83\x83\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0CSWa\x0CRa\x1B~V[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x0C\x8CW\x81` \x01[a\x0Cya\x19\xA5V[\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x0CqW\x90P[P\x91P_[\x84\x84\x90P\x81\x10\x15a\x0E\x9EWa\x0C\xBE\x85\x85\x83\x81\x81\x10a\x0C\xB2Wa\x0C\xB1a#\xA1V[[\x90P` \x02\x015a\x02\xD7V[a\r\x18W\x84\x84\x82\x81\x81\x10a\x0C\xD5Wa\x0C\xD4a#\xA1V[[\x90P` \x02\x015`@Q\x7F\x06f\xCB\xDF\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\x81R`\x04\x01a\r\x0F\x91\x90a\x1D\x0BV[`@Q\x80\x91\x03\x90\xFD[_\x82`\x05\x01_\x87\x87\x85\x81\x81\x10a\r1Wa\r0a#\xA1V[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x90P_\x83`\x07\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\r\xD9W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\r\x90W[PPPPP\x90P`@Q\x80`\x80\x01`@R\x80\x88\x88\x86\x81\x81\x10a\r\xFEWa\r\xFDa#\xA1V[[\x90P` \x02\x015\x81R` \x01\x85_\x01_\x8A\x8A\x88\x81\x81\x10a\x0E!Wa\x0E a#\xA1V[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x81R` \x01\x85`\x02\x01_\x8A\x8A\x88\x81\x81\x10a\x0ESWa\x0ERa#\xA1V[[\x90P` \x02\x015\x81R` \x01\x90\x81R` \x01_ T\x81R` \x01\x82\x81RP\x85\x84\x81Q\x81\x10a\x0E\x84Wa\x0E\x83a#\xA1V[[` \x02` \x01\x01\x81\x90RPPP\x80\x80`\x01\x01\x91PPa\x0C\x91V[PP\x92\x91PPV[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[``_a\x0E\xEAa\x10kV[\x90P_\x81`\x05\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x07\x01_\x82\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x0F\x93W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x0FJW[PPPPP\x92PPP\x91\x90PV[``_`\x01a\x0F\xAF\x84a\x15\x05V[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0F\xCDWa\x0F\xCCa\x1B~V[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0F\xFFW\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a\x10`W\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a\x10UWa\x10Ta&mV[[\x04\x94P_\x85\x03a\x10\x0CW[\x81\x93PPPP\x91\x90PV[_\x7F\xF4\x1C`\xEA[\x83\xC8\xF1\x9Bf6\x13\xFF\xDD?\xA4A\xA5\x993\xB8\xA4\xFD\xF4\xDA\x89\x1B8C=\x1A\0\x90P\x90V[_a\x10\x9Ba\x10\xB6V[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a\x11\x8AWP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x11qa\x16VV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x11\xC1W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x12 W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x12D\x91\x90a&\xAEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x12\xB3W3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\x12\xAA\x91\x90a#\xDDV[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a\x13\x1EWP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13\x1B\x91\x90a&\xEDV[`\x01[a\x13_W\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x13V\x91\x90a#\xDDV[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a\x13\xC5W\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a\x13\xBC\x91\x90a\x1D\x0BV[`@Q\x80\x91\x03\x90\xFD[a\x13\xCF\x83\x83a\x16\xA9V[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x14YW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x10\x83_\x1C\x90\x1C\x16\x90P\x91\x90PV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cg\x99\xEFR`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x14\xD3W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x14\xF7\x91\x90a',V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a\x15aWz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a\x15WWa\x15Va&mV[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x15\x9EWm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a\x15\x94Wa\x15\x93a&mV[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a\x15\xCDWf#\x86\xF2o\xC1\0\0\x83\x81a\x15\xC3Wa\x15\xC2a&mV[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a\x15\xF6Wc\x05\xF5\xE1\0\x83\x81a\x15\xECWa\x15\xEBa&mV[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a\x16\x1BWa'\x10\x83\x81a\x16\x11Wa\x16\x10a&mV[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a\x16>W`d\x83\x81a\x164Wa\x163a&mV[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a\x16MW`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[_a\x16\x82\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba\x17\x1BV[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a\x16\xB2\x82a\x17$V[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a\x17\x0EWa\x17\x08\x82\x82a\x17\xEDV[Pa\x17\x17V[a\x17\x16a\x18mV[[PPV[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a\x17\x7FW\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x17v\x91\x90a#\xDDV[`@Q\x80\x91\x03\x90\xFD[\x80a\x17\xAB\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba\x17\x1BV[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa\x18\x16\x91\x90a'\x9BV[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a\x18NW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a\x18SV[``\x91P[P\x91P\x91Pa\x18c\x85\x83\x83a\x18\xA9V[\x92PPP\x92\x91PPV[_4\x11\x15a\x18\xA7W`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[``\x82a\x18\xBEWa\x18\xB9\x82a\x196V[a\x19.V[_\x82Q\x14\x80\x15a\x18\xE4WP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a\x19&W\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a\x19\x1D\x91\x90a#\xDDV[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa\x19/V[[\x93\x92PPPV[_\x81Q\x11\x15a\x19HW\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@Q\x80`\x80\x01`@R\x80_\x80\x19\x16\x81R` \x01_\x81R` \x01_\x80\x19\x16\x81R` \x01``\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80_\x80\x19\x16\x81R` \x01_\x81R` \x01_\x80\x19\x16\x81R` \x01``\x81RP\x90V[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15a\x1A\x07W\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa\x19\xECV[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a\x1A,\x82a\x19\xD0V[a\x1A6\x81\x85a\x19\xDAV[\x93Pa\x1AF\x81\x85` \x86\x01a\x19\xEAV[a\x1AO\x81a\x1A\x12V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x1Ar\x81\x84a\x1A\"V[\x90P\x92\x91PPV[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[a\x1A\x9D\x81a\x1A\x8BV[\x81\x14a\x1A\xA7W_\x80\xFD[PV[_\x815\x90Pa\x1A\xB8\x81a\x1A\x94V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x1A\xD3Wa\x1A\xD2a\x1A\x83V[[_a\x1A\xE0\x84\x82\x85\x01a\x1A\xAAV[\x91PP\x92\x91PPV[_\x81\x15\x15\x90P\x91\x90PV[a\x1A\xFD\x81a\x1A\xE9V[\x82RPPV[_` \x82\x01\x90Pa\x1B\x16_\x83\x01\x84a\x1A\xF4V[\x92\x91PPV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a\x1BE\x82a\x1B\x1CV[\x90P\x91\x90PV[a\x1BU\x81a\x1B;V[\x81\x14a\x1B_W_\x80\xFD[PV[_\x815\x90Pa\x1Bp\x81a\x1BLV[\x92\x91PPV[_\x80\xFD[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[a\x1B\xB4\x82a\x1A\x12V[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1B\xD3Wa\x1B\xD2a\x1B~V[[\x80`@RPPPV[_a\x1B\xE5a\x1AzV[\x90Pa\x1B\xF1\x82\x82a\x1B\xABV[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a\x1C\x10Wa\x1C\x0Fa\x1B~V[[a\x1C\x19\x82a\x1A\x12V[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_a\x1CFa\x1CA\x84a\x1B\xF6V[a\x1B\xDCV[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15a\x1CbWa\x1Caa\x1BzV[[a\x1Cm\x84\x82\x85a\x1C&V[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12a\x1C\x89Wa\x1C\x88a\x1BvV[[\x815a\x1C\x99\x84\x82` \x86\x01a\x1C4V[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a\x1C\xB8Wa\x1C\xB7a\x1A\x83V[[_a\x1C\xC5\x85\x82\x86\x01a\x1BbV[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1C\xE6Wa\x1C\xE5a\x1A\x87V[[a\x1C\xF2\x85\x82\x86\x01a\x1CuV[\x91PP\x92P\x92\x90PV[a\x1D\x05\x81a\x1A\x8BV[\x82RPPV[_` \x82\x01\x90Pa\x1D\x1E_\x83\x01\x84a\x1C\xFCV[\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12a\x1DAWa\x1D@a\x1BvV[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1D^Wa\x1D]a\x1D$V[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15a\x1DzWa\x1Dya\x1D(V[[\x92P\x92\x90PV[_\x80` \x83\x85\x03\x12\x15a\x1D\x97Wa\x1D\x96a\x1A\x83V[[_\x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1D\xB4Wa\x1D\xB3a\x1A\x87V[[a\x1D\xC0\x85\x82\x86\x01a\x1D,V[\x92P\x92PP\x92P\x92\x90PV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a\x1D\xFE\x81a\x1A\x8BV[\x82RPPV[_\x81\x90P\x91\x90PV[a\x1E\x16\x81a\x1E\x04V[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a\x1EN\x81a\x1B;V[\x82RPPV[_a\x1E_\x83\x83a\x1EEV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a\x1E\x81\x82a\x1E\x1CV[a\x1E\x8B\x81\x85a\x1E&V[\x93Pa\x1E\x96\x83a\x1E6V[\x80_[\x83\x81\x10\x15a\x1E\xC6W\x81Qa\x1E\xAD\x88\x82a\x1ETV[\x97Pa\x1E\xB8\x83a\x1EkV[\x92PP`\x01\x81\x01\x90Pa\x1E\x99V[P\x85\x93PPPP\x92\x91PPV[_`\x80\x83\x01_\x83\x01Qa\x1E\xE8_\x86\x01\x82a\x1D\xF5V[P` \x83\x01Qa\x1E\xFB` \x86\x01\x82a\x1E\rV[P`@\x83\x01Qa\x1F\x0E`@\x86\x01\x82a\x1D\xF5V[P``\x83\x01Q\x84\x82\x03``\x86\x01Ra\x1F&\x82\x82a\x1EwV[\x91PP\x80\x91PP\x92\x91PPV[_a\x1F>\x83\x83a\x1E\xD3V[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a\x1F\\\x82a\x1D\xCCV[a\x1Ff\x81\x85a\x1D\xD6V[\x93P\x83` \x82\x02\x85\x01a\x1Fx\x85a\x1D\xE6V[\x80_[\x85\x81\x10\x15a\x1F\xB3W\x84\x84\x03\x89R\x81Qa\x1F\x94\x85\x82a\x1F3V[\x94Pa\x1F\x9F\x83a\x1FFV[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90Pa\x1F{V[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x1F\xDD\x81\x84a\x1FRV[\x90P\x92\x91PPV[a\x1F\xEE\x81a\x1E\x04V[\x81\x14a\x1F\xF8W_\x80\xFD[PV[_\x815\x90Pa \t\x81a\x1F\xE5V[\x92\x91PPV[_\x80_\x80`\x80\x85\x87\x03\x12\x15a 'Wa &a\x1A\x83V[[_a 4\x87\x82\x88\x01a\x1A\xAAV[\x94PP` a E\x87\x82\x88\x01a\x1F\xFBV[\x93PP`@a V\x87\x82\x88\x01a\x1A\xAAV[\x92PP``a g\x87\x82\x88\x01a\x1A\xAAV[\x91PP\x92\x95\x91\x94P\x92PV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_`\x80\x83\x01_\x83\x01Qa \xB1_\x86\x01\x82a\x1D\xF5V[P` \x83\x01Qa \xC4` \x86\x01\x82a\x1E\rV[P`@\x83\x01Qa \xD7`@\x86\x01\x82a\x1D\xF5V[P``\x83\x01Q\x84\x82\x03``\x86\x01Ra \xEF\x82\x82a\x1EwV[\x91PP\x80\x91PP\x92\x91PPV[_a!\x07\x83\x83a \x9CV[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a!%\x82a sV[a!/\x81\x85a }V[\x93P\x83` \x82\x02\x85\x01a!A\x85a \x8DV[\x80_[\x85\x81\x10\x15a!|W\x84\x84\x03\x89R\x81Qa!]\x85\x82a \xFCV[\x94Pa!h\x83a!\x0FV[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90Pa!DV[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra!\xA6\x81\x84a!\x1BV[\x90P\x92\x91PPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_a!\xC8\x82a\x1E\x1CV[a!\xD2\x81\x85a!\xAEV[\x93Pa!\xDD\x83a\x1E6V[\x80_[\x83\x81\x10\x15a\"\rW\x81Qa!\xF4\x88\x82a\x1ETV[\x97Pa!\xFF\x83a\x1EkV[\x92PP`\x01\x81\x01\x90Pa!\xE0V[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\"2\x81\x84a!\xBEV[\x90P\x92\x91PPV[_\x81\x90P\x92\x91PPV[_a\"N\x82a\x19\xD0V[a\"X\x81\x85a\":V[\x93Pa\"h\x81\x85` \x86\x01a\x19\xEAV[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_a\"\xA8`\x02\x83a\":V[\x91Pa\"\xB3\x82a\"tV[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_a\"\xF2`\x01\x83a\":V[\x91Pa\"\xFD\x82a\"\xBEV[`\x01\x82\x01\x90P\x91\x90PV[_a#\x13\x82\x87a\"DV[\x91Pa#\x1E\x82a\"\x9CV[\x91Pa#*\x82\x86a\"DV[\x91Pa#5\x82a\"\xE6V[\x91Pa#A\x82\x85a\"DV[\x91Pa#L\x82a\"\xE6V[\x91Pa#X\x82\x84a\"DV[\x91P\x81\x90P\x95\x94PPPPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[a#\x82\x81a#fV[\x82RPPV[_` \x82\x01\x90Pa#\x9B_\x83\x01\x84a#yV[\x92\x91PPV[\x7FNH{q\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_R`2`\x04R`$_\xFD[a#\xD7\x81a\x1B;V[\x82RPPV[_` \x82\x01\x90Pa#\xF0_\x83\x01\x84a#\xCEV[\x92\x91PPV[a#\xFF\x81a\x1A\xE9V[\x81\x14a$\tW_\x80\xFD[PV[_\x81Q\x90Pa$\x1A\x81a#\xF6V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a$5Wa$4a\x1A\x83V[[_a$B\x84\x82\x85\x01a$\x0CV[\x91PP\x92\x91PPV[a$T\x81a\x1E\x04V[\x82RPPV[_` \x82\x01\x90Pa$m_\x83\x01\x84a$KV[\x92\x91PPV[_`@\x82\x01\x90Pa$\x86_\x83\x01\x85a\x1C\xFCV[a$\x93` \x83\x01\x84a#\xCEV[\x93\x92PPPV[_`\x80\x82\x01\x90Pa$\xAD_\x83\x01\x87a\x1C\xFCV[a$\xBA` \x83\x01\x86a$KV[a$\xC7`@\x83\x01\x85a\x1C\xFCV[a$\xD4``\x83\x01\x84a\x1C\xFCV[\x95\x94PPPPPV[\x7FNH{q\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_R`\x11`\x04R`$_\xFD[_a%\x14\x82a\x1E\x04V[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03a%FWa%Ea$\xDDV[[`\x01\x82\x01\x90P\x91\x90PV[_\x81T\x90P\x91\x90PV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_\x81_\x1C\x90P\x91\x90PV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a%\xA9a%\xA4\x83a%mV[a%xV[\x90P\x91\x90PV[_a%\xBB\x82Ta%\x97V[\x90P\x91\x90PV[_`\x01\x82\x01\x90P\x91\x90PV[_a%\xD8\x82a%QV[a%\xE2\x81\x85a!\xAEV[\x93Pa%\xED\x83a%[V[\x80_[\x83\x81\x10\x15a&$Wa&\x01\x82a%\xB0V[a&\x0B\x88\x82a\x1ETV[\x97Pa&\x16\x83a%\xC2V[\x92PP`\x01\x81\x01\x90Pa%\xF0V[P\x85\x93PPPP\x92\x91PPV[_``\x82\x01\x90Pa&D_\x83\x01\x86a\x1C\xFCV[a&Q` \x83\x01\x85a\x1C\xFCV[\x81\x81\x03`@\x83\x01Ra&c\x81\x84a%\xCEV[\x90P\x94\x93PPPPV[\x7FNH{q\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_R`\x12`\x04R`$_\xFD[_\x81Q\x90Pa&\xA8\x81a\x1BLV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a&\xC3Wa&\xC2a\x1A\x83V[[_a&\xD0\x84\x82\x85\x01a&\x9AV[\x91PP\x92\x91PPV[_\x81Q\x90Pa&\xE7\x81a\x1A\x94V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a'\x02Wa'\x01a\x1A\x83V[[_a'\x0F\x84\x82\x85\x01a&\xD9V[\x91PP\x92\x91PPV[_\x81Q\x90Pa'&\x81a\x1F\xE5V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a'AWa'@a\x1A\x83V[[_a'N\x84\x82\x85\x01a'\x18V[\x91PP\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[_a'u\x82a'WV[a'\x7F\x81\x85a'aV[\x93Pa'\x8F\x81\x85` \x86\x01a\x19\xEAV[\x80\x84\x01\x91PP\x92\x91PPV[_a'\xA6\x82\x84a'kV[\x91P\x81\x90P\x92\x91PPV", ); #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] diff --git a/gateway-contracts/rust_bindings/src/decryption.rs b/gateway-contracts/rust_bindings/src/decryption.rs index a9ddd201e..f5227f3ac 100644 --- a/gateway-contracts/rust_bindings/src/decryption.rs +++ b/gateway-contracts/rust_bindings/src/decryption.rs @@ -622,10 +622,6 @@ interface Decryption { bytes32 ctHandle; address contractAddress; } - struct DelegationAccounts { - address delegatorAddress; - address delegatedAddress; - } struct SnsCiphertextMaterial { bytes32 ctHandle; uint256 keyId; @@ -634,12 +630,10 @@ interface Decryption { } error AccountNotAllowedToUseCiphertext(bytes32 ctHandle, address accountAddress); - error AccountNotDelegatedForContracts(uint256 chainId, DelegationAccounts delegationAccounts, address[] contractAddresses); error AddressEmptyCode(address target); error ContractAddressesMaxLengthExceeded(uint256 maxLength, uint256 actualLength); error ContractNotInContractAddresses(address contractAddress, address[] contractAddresses); error DecryptionNotRequested(uint256 decryptionId); - error DelegatorAddressInContractAddresses(address delegatorAddress, address[] contractAddresses); error DifferentKeyIdsNotAllowed(SnsCiphertextMaterial firstSnsCtMaterial, SnsCiphertextMaterial invalidSnsCtMaterial); error ECDSAInvalidSignature(); error ECDSAInvalidSignatureLength(uint256 length); @@ -693,13 +687,11 @@ interface Decryption { constructor(); function UPGRADE_INTERFACE_VERSION() external view returns (string memory); - function delegatedUserDecryptionRequest(CtHandleContractPair[] memory ctHandleContractPairs, IDecryption.RequestValidity memory requestValidity, DelegationAccounts memory delegationAccounts, IDecryption.ContractsInfo memory contractsInfo, bytes memory publicKey, bytes memory signature, bytes memory extraData) external; function eip712Domain() external view returns (bytes1 fields, string memory name, string memory version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] memory extensions); function getDecryptionConsensusTxSenders(uint256 decryptionId) external view returns (address[] memory); function getVersion() external pure returns (string memory); function initializeFromEmptyProxy() external; function isDecryptionDone(uint256 decryptionId) external view returns (bool); - function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAccounts memory delegationAccounts, CtHandleContractPair[] memory ctHandleContractPairs, address[] memory contractAddresses, bytes memory) external view returns (bool); function isPublicDecryptionReady(bytes32[] memory ctHandles, bytes memory) external view returns (bool); function isUserDecryptionReady(address userAddress, CtHandleContractPair[] memory ctHandleContractPairs, bytes memory) external view returns (bool); function pause() external; @@ -735,97 +727,6 @@ interface Decryption { ], "stateMutability": "view" }, - { - "type": "function", - "name": "delegatedUserDecryptionRequest", - "inputs": [ - { - "name": "ctHandleContractPairs", - "type": "tuple[]", - "internalType": "struct CtHandleContractPair[]", - "components": [ - { - "name": "ctHandle", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "contractAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "requestValidity", - "type": "tuple", - "internalType": "struct IDecryption.RequestValidity", - "components": [ - { - "name": "startTimestamp", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "durationDays", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "delegationAccounts", - "type": "tuple", - "internalType": "struct DelegationAccounts", - "components": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegatedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "contractsInfo", - "type": "tuple", - "internalType": "struct IDecryption.ContractsInfo", - "components": [ - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "addresses", - "type": "address[]", - "internalType": "address[]" - } - ] - }, - { - "name": "publicKey", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "signature", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "extraData", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, { "type": "function", "name": "eip712Domain", @@ -927,69 +828,6 @@ interface Decryption { ], "stateMutability": "view" }, - { - "type": "function", - "name": "isDelegatedUserDecryptionReady", - "inputs": [ - { - "name": "contractsChainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "delegationAccounts", - "type": "tuple", - "internalType": "struct DelegationAccounts", - "components": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegatedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "ctHandleContractPairs", - "type": "tuple[]", - "internalType": "struct CtHandleContractPair[]", - "components": [ - { - "name": "ctHandle", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "contractAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "contractAddresses", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, { "type": "function", "name": "isPublicDecryptionReady", @@ -1527,39 +1365,6 @@ interface Decryption { } ] }, - { - "type": "error", - "name": "AccountNotDelegatedForContracts", - "inputs": [ - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "delegationAccounts", - "type": "tuple", - "internalType": "struct DelegationAccounts", - "components": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegatedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "contractAddresses", - "type": "address[]", - "internalType": "address[]" - } - ] - }, { "type": "error", "name": "AddressEmptyCode", @@ -1614,22 +1419,6 @@ interface Decryption { } ] }, - { - "type": "error", - "name": "DelegatorAddressInContractAddresses", - "inputs": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "contractAddresses", - "type": "address[]", - "internalType": "address[]" - } - ] - }, { "type": "error", "name": "DifferentKeyIdsNotAllowed", @@ -2076,22 +1865,22 @@ pub mod Decryption { /// The creation / init bytecode of the contract. /// /// ```text - ///0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801562000043575f80fd5b50620000546200005a60201b60201c565b620001c4565b5f6200006b6200015e60201b60201c565b9050805f0160089054906101000a900460ff1615620000b6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146200015b5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051620001529190620001a9565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b620001a38162000185565b82525050565b5f602082019050620001be5f83018462000198565b92915050565b6080516175fd620001eb5f395f8181612c2901528181612c7e0152612f2001526175fd5ff3fe608060405260043610610113575f3560e01c80635c975abb1161009f578063ad3cb1cc11610063578063ad3cb1cc1461034f578063b6e9a9b314610379578063d8998f45146103b5578063f1b57adb146103dd578063fbb832591461040557610113565b80635c975abb1461028f5780636f8913bc146102b95780638456cb59146102e157806384b0196e146102f75780639fad5a2f1461032757610113565b80633f4ba83a116100e65780633f4ba83a146101bb5780634014c4cd146101d15780634f1ef2861461020d57806352d1902d1461022957806358f5b8ab1461025357610113565b8063046f9eb3146101175780630900cc691461013f5780630d8e6e2c1461017b57806339f73810146101a5575b5f80fd5b348015610122575f80fd5b5061013d60048036038101906101389190614d81565b610441565b005b34801561014a575f80fd5b5061016560048036038101906101609190614e45565b6108cf565b6040516101729190614f57565b60405180910390f35b348015610186575f80fd5b5061018f6109a0565b60405161019c9190615001565b60405180910390f35b3480156101b0575f80fd5b506101b9610a1b565b005b3480156101c6575f80fd5b506101cf610c53565b005b3480156101dc575f80fd5b506101f760048036038101906101f29190615076565b610d9b565b604051610204919061510e565b60405180910390f35b61022760048036038101906102229190615279565b610f28565b005b348015610234575f80fd5b5061023d610f47565b60405161024a91906152eb565b60405180910390f35b34801561025e575f80fd5b5061027960048036038101906102749190614e45565b610f78565b604051610286919061510e565b60405180910390f35b34801561029a575f80fd5b506102a3610fac565b6040516102b0919061510e565b60405180910390f35b3480156102c4575f80fd5b506102df60048036038101906102da9190614d81565b610fce565b005b3480156102ec575f80fd5b506102f56113d7565b005b348015610302575f80fd5b5061030b6114fc565b60405161031e9796959493929190615413565b60405180910390f35b348015610332575f80fd5b5061034d60048036038101906103489190615548565b611605565b005b34801561035a575f80fd5b50610363611b57565b6040516103709190615001565b60405180910390f35b348015610384575f80fd5b5061039f600480360381019061039a91906156d8565b611b90565b6040516103ac919061510e565b60405180910390f35b3480156103c0575f80fd5b506103db60048036038101906103d69190615076565b611eae565b005b3480156103e8575f80fd5b5061040360048036038101906103fe91906157af565b61206c565b005b348015610410575f80fd5b5061042b600480360381019061042691906158e9565b61251d565b604051610438919061510e565b60405180910390f35b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b815260040161048e919061597a565b602060405180830381865afa1580156104a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104cd91906159bd565b61050e57336040517faee86323000000000000000000000000000000000000000000000000000000008152600401610505919061597a565b60405180910390fd5b5f61051761278c565b905060f86002600581111561052f5761052e6159e8565b5b901b881115806105425750806009015488115b1561058457876040517fd48af94200000000000000000000000000000000000000000000000000000000815260040161057b9190615a15565b60405180910390fd5b5f816008015f8a81526020019081526020015f206040518060400160405290815f820180546105b290615a5b565b80601f01602080910402602001604051908101604052809291908181526020018280546105de90615a5b565b80156106295780601f1061060057610100808354040283529160200191610629565b820191905f5260205f20905b81548152906001019060200180831161060c57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561067f57602002820191905f5260205f20905b81548152602001906001019080831161066b575b50505050508152505090505f6040518060800160405280835f01518152602001836020015181526020018a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081525090505f610745826127b3565b90506107538b828a8a61287a565b5f846003015f8d81526020019081526020015f205f805f1b81526020019081526020015f2090508033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b7f7fcdfb5381917f554a717d0a5470a33f5a49ba6445f05ec43c74c0bc2cc608b26001838054905061080c9190615ab8565b8d8d8d8d8d8d6040516108259796959493929190615b27565b60405180910390a2846001015f8d81526020019081526020015f205f9054906101000a900460ff16158015610863575061086281805490506129eb565b5b156108c1576001856001015f8e81526020019081526020015f205f6101000a81548160ff0219169083151502179055508b7fe89752be0ecdb68b2a6eb5ef1a891039e0e92ae3c8a62274c5881e48eea1ed2560405160405180910390a25b505050505050505050505050565b60605f6108da61278c565b90505f816004015f8581526020019081526020015f20549050816003015f8581526020019081526020015f205f8281526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561099257602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610949575b505050505092505050919050565b60606040518060400160405280600a81526020017f44656372797074696f6e000000000000000000000000000000000000000000008152506109e15f612a7c565b6109eb6001612a7c565b6109f45f612a7c565b604051602001610a079493929190615c53565b604051602081830303815290604052905090565b6001610a25612b46565b67ffffffffffffffff1614610a66576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f610a71612b6a565b9050805f0160089054906101000a900460ff1680610ab957508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b15610af0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff021916908315150217905550610ba96040518060400160405280600a81526020017f44656372797074696f6e000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250612b91565b610bb1612ba7565b5f610bba61278c565b905060f860016005811115610bd257610bd16159e8565b5b901b816007018190555060f860026005811115610bf257610bf16159e8565b5b901b8160090181905550505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d282604051610c479190615cd3565b60405180910390a15050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd49190615d00565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610d4f575073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610d9157336040517fe19166ee000000000000000000000000000000000000000000000000000000008152600401610d88919061597a565b60405180910390fd5b610d99612bb9565b565b5f805f90505b85859050811015610f1a5773f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff16630620326d878784818110610def57610dee615d2b565b5b905060200201356040518263ffffffff1660e01b8152600401610e1291906152eb565b602060405180830381865afa158015610e2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5191906159bd565b1580610eff575073c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff16632ddc9a6f878784818110610e9b57610e9a615d2b565b5b905060200201356040518263ffffffff1660e01b8152600401610ebe91906152eb565b602060405180830381865afa158015610ed9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610efd91906159bd565b155b15610f0d575f915050610f20565b8080600101915050610da1565b50600190505b949350505050565b610f30612c27565b610f3982612d0d565b610f438282612e00565b5050565b5f610f50612f1e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b5f80610f8261278c565b9050806001015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b5f80610fb6612fa5565b9050805f015f9054906101000a900460ff1691505090565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b815260040161101b919061597a565b602060405180830381865afa158015611036573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105a91906159bd565b61109b57336040517faee86323000000000000000000000000000000000000000000000000000000008152600401611092919061597a565b60405180910390fd5b5f6110a461278c565b905060f8600160058111156110bc576110bb6159e8565b5b901b881115806110cf5750806007015488115b1561111157876040517fd48af9420000000000000000000000000000000000000000000000000000000081526004016111089190615a15565b60405180910390fd5b5f6040518060600160405280836006015f8c81526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561117857602002820191905f5260205f20905b815481526020019060010190808311611164575b5050505050815260200189898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081525090505f61121e82612fcc565b905061122c8a82898961287a565b5f836005015f8c81526020019081526020015f205f8381526020019081526020015f20905080888890918060018154018082558091505060019003905f5260205f20015f90919290919290919290919250918261128a929190615eff565b50836003015f8c81526020019081526020015f205f8381526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836001015f8c81526020019081526020015f205f9054906101000a900460ff1615801561134157506113408180549050613086565b5b156113ca576001846001015f8d81526020019081526020015f205f6101000a81548160ff02191690831515021790555081846004015f8d81526020019081526020015f20819055508a7fd7e58a367a0a6c298e76ad5d240004e327aa1423cbe4bd7ff85d4c715ef8d15f8b8b848a8a6040516113c195949392919061611a565b60405180910390a25b5050505050505050505050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff166346fbf68e336040518263ffffffff1660e01b8152600401611424919061597a565b602060405180830381865afa15801561143f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061146391906159bd565b1580156114b0575073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156114f257336040517f388916bb0000000000000000000000000000000000000000000000000000000081526004016114e9919061597a565b60405180910390fd5b6114fa613117565b565b5f6060805f805f60605f61150e613186565b90505f801b815f015414801561152957505f801b8160010154145b611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f906161b2565b60405180910390fd5b6115706131ad565b61157861324b565b46305f801b5f67ffffffffffffffff81111561159757611596615155565b5b6040519080825280602002602001820160405280156115c55781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b61160d6132e9565b5f87806020019061161e91906161dc565b905003611657576040517f57cfa21700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a60ff1687806020019061166c91906161dc565b905011156116c557600a87806020019061168691906161dc565b90506040517faf1f04950000000000000000000000000000000000000000000000000000000081526004016116bc92919061627a565b60405180910390fd5b6116de898036038101906116d991906162f6565b61332a565b6117478780602001906116f191906161dc565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f82011690508083019250505050505050895f0160208101906117429190616321565b613475565b156117ac57875f01602081019061175e9190616321565b87806020019061176e91906161dc565b6040517fc3446ac70000000000000000000000000000000000000000000000000000000081526004016117a3939291906163d2565b60405180910390fd5b5f6118188c8c8a80602001906117c291906161dc565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508c5f0160208101906118139190616321565b6134f3565b9050611837885f01358a8a806020019061183291906161dc565b6136e6565b5f6040518060c0016040528089898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081526020018a806020019061189c91906161dc565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505081526020018b5f0160208101906118f29190616321565b73ffffffffffffffffffffffffffffffffffffffff1681526020018c5f013581526020018c60200135815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815250905061198b818b60200160208101906119809190616321565b88888d5f01356137c5565b5f73c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff1663a14f8971846040518263ffffffff1660e01b81526004016119d991906164b9565b5f60405180830381865afa1580156119f3573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611a1b9190616746565b9050611a268161389d565b5f611a2f61278c565b9050806009015f815480929190611a459061678d565b91905055505f8160090154905060405180604001604052808c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815260200186815250826008015f8381526020019081526020015f205f820151815f019081611ad091906167de565b506020820151816001019080519060200190611aed929190614c2b565b50905050807ff9011bd6ba0da6049c520d70fe5971f17ed7ab795486052544b51019896c596b848f6020016020810190611b279190616321565b8e8e8c8c604051611b3d96959493929190616a34565b60405180910390a250505050505050505050505050505050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b5f73f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff16632b13591c8a8a88886040518563ffffffff1660e01b8152600401611be49493929190616acd565b602060405180830381865afa158015611bff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c2391906159bd565b611c2f575f9050611ea2565b5f5b87879050811015611e9c5773f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff1663c6528f69898984818110611c7f57611c7e615d2b565b5b9050604002015f01358b5f016020810190611c9a9190616321565b6040518363ffffffff1660e01b8152600401611cb7929190616b0b565b602060405180830381865afa158015611cd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf691906159bd565b1580611dd2575073f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff1663c6528f69898984818110611d4057611d3f615d2b565b5b9050604002015f01358a8a85818110611d5c57611d5b615d2b565b5b9050604002016020016020810190611d749190616321565b6040518363ffffffff1660e01b8152600401611d91929190616b0b565b602060405180830381865afa158015611dac573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dd091906159bd565b155b80611e81575073c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff16632ddc9a6f898984818110611e1b57611e1a615d2b565b5b9050604002015f01356040518263ffffffff1660e01b8152600401611e4091906152eb565b602060405180830381865afa158015611e5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7f91906159bd565b155b15611e8f575f915050611ea2565b8080600101915050611c31565b50600190505b98975050505050505050565b611eb66132e9565b5f8484905003611ef2576040517f2de7543800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f3b8484808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f82011690508083019250505050505050613983565b5f73c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff1663a14f897186866040518363ffffffff1660e01b8152600401611f8b929190616b9a565b5f60405180830381865afa158015611fa5573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611fcd9190616746565b9050611fd88161389d565b5f611fe161278c565b9050806007015f815480929190611ff79061678d565b91905055505f816007015490508686836006015f8481526020019081526020015f209190612026929190614c76565b50807f22db480a39bd72556438aadb4a32a3d2a6638b87c03bbec5fef6997e109587ff84878760405161205b93929190616bbc565b60405180910390a250505050505050565b6120746132e9565b5f88806020019061208591906161dc565b9050036120be576040517f57cfa21700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a60ff168880602001906120d391906161dc565b9050111561212c57600a8880602001906120ed91906161dc565b90506040517faf1f049500000000000000000000000000000000000000000000000000000000815260040161212392919061627a565b60405180910390fd5b6121458980360381019061214091906162f6565b61332a565b61219d88806020019061215891906161dc565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505088613475565b156121f157868880602001906121b391906161dc565b6040517fdc4d78b10000000000000000000000000000000000000000000000000000000081526004016121e8939291906163d2565b60405180910390fd5b5f61224c8c8c8b806020019061220791906161dc565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508b6134f3565b90505f6040518060a0016040528089898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081526020018b80602001906122b391906161dc565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505081526020018c5f013581526020018c60200135815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050508152509050612363818a88888e5f0135613a3b565b5f73c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff1663a14f8971846040518263ffffffff1660e01b81526004016123b191906164b9565b5f60405180830381865afa1580156123cb573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906123f39190616746565b90506123fe8161389d565b5f61240761278c565b9050806009015f81548092919061241d9061678d565b91905055505f8160090154905060405180604001604052808c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815260200186815250826008015f8381526020019081526020015f205f820151815f0190816124a891906167de565b5060208201518160010190805190602001906124c5929190614c2b565b50905050807ff9011bd6ba0da6049c520d70fe5971f17ed7ab795486052544b51019896c596b848e8e8e8c8c60405161250396959493929190616a34565b60405180910390a250505050505050505050505050505050565b5f805f90505b8585905081101561277d5773f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff1663c6528f6987878481811061257157612570615d2b565b5b9050604002015f0135896040518363ffffffff1660e01b8152600401612598929190616b0b565b602060405180830381865afa1580156125b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125d791906159bd565b15806126b3575073f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff1663c6528f6987878481811061262157612620615d2b565b5b9050604002015f013588888581811061263d5761263c615d2b565b5b90506040020160200160208101906126559190616321565b6040518363ffffffff1660e01b8152600401612672929190616b0b565b602060405180830381865afa15801561268d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126b191906159bd565b155b80612762575073c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff16632ddc9a6f8787848181106126fc576126fb615d2b565b5b9050604002015f01356040518263ffffffff1660e01b815260040161272191906152eb565b602060405180830381865afa15801561273c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276091906159bd565b155b15612770575f915050612783565b8080600101915050612523565b50600190505b95945050505050565b5f7f68113e68af494c6efd0210fc4bf9ba748d1ffadaa4718217fdf63548c4aee700905090565b5f6128736040518060a00160405280606d815260200161740c606d913980519060200120835f01518051906020012084602001516040516020016127f79190616c7f565b60405160208183030381529060405280519060200120856040015180519060200120866060015160405160200161282e9190616ccf565b60405160208183030381529060405280519060200120604051602001612858959493929190616ce5565b60405160208183030381529060405280519060200120613b13565b9050919050565b5f61288361278c565b90505f6128d38585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050613b2c565b90506128de81613b56565b816002015f8781526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561297d5785816040517f99ec48d9000000000000000000000000000000000000000000000000000000008152600401612974929190616d36565b60405180910390fd5b6001826002015f8881526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505050505050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663c2b429866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a6e9190616d5d565b905080831015915050919050565b60605f6001612a8a84613c26565b0190505f8167ffffffffffffffff811115612aa857612aa7615155565b5b6040519080825280601f01601f191660200182016040528015612ada5781602001600182028036833780820191505090505b5090505f82602001820190505b600115612b3b578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612b3057612b2f616d88565b5b0494505f8503612ae7575b819350505050919050565b5f612b4f612b6a565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b612b99613d77565b612ba38282613db7565b5050565b612baf613d77565b612bb7613e08565b565b612bc1613e38565b5f612bca612fa5565b90505f815f015f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612c0f613e78565b604051612c1c919061597a565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480612cd457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612cbb613e7f565b73ffffffffffffffffffffffffffffffffffffffff1614155b15612d0b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d8e9190615d00565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612dfd57336040517f0e56cf3d000000000000000000000000000000000000000000000000000000008152600401612df4919061597a565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612e6857506040513d601f19601f82011682018060405250810190612e659190616db5565b60015b612ea957816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401612ea0919061597a565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b8114612f0f57806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401612f0691906152eb565b60405180910390fd5b612f198383613ed2565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614612fa3576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300905090565b5f61307f6040518060800160405280605481526020016174796054913980519060200120835f01516040516020016130049190616c7f565b60405160208183030381529060405280519060200120846020015180519060200120856040015160405160200161303b9190616ccf565b604051602081830303815290604052805190602001206040516020016130649493929190616de0565b60405160208183030381529060405280519060200120613b13565b9050919050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632a3889986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131099190616d5d565b905080831015915050919050565b61311f6132e9565b5f613128612fa5565b90506001815f015f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861316e613e78565b60405161317b919061597a565b60405180910390a150565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f6131b8613186565b90508060020180546131c990615a5b565b80601f01602080910402602001604051908101604052809291908181526020018280546131f590615a5b565b80156132405780601f1061321757610100808354040283529160200191613240565b820191905f5260205f20905b81548152906001019060200180831161322357829003601f168201915b505050505091505090565b60605f613256613186565b905080600301805461326790615a5b565b80601f016020809104026020016040519081016040528092919081815260200182805461329390615a5b565b80156132de5780601f106132b5576101008083540402835291602001916132de565b820191905f5260205f20905b8154815290600101906020018083116132c157829003601f168201915b505050505091505090565b6132f1610fac565b15613328576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f816020015103613367576040517fde2859c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61016d61ffff16816020015111156133be5761016d81602001516040517f329518630000000000000000000000000000000000000000000000000000000081526004016133b5929190616e60565b60405180910390fd5b42815f0151111561340b5742815f01516040517ff24c0887000000000000000000000000000000000000000000000000000000008152600401613402929190616e87565b60405180910390fd5b4262015180826020015161341f9190616eae565b825f015161342d9190616eef565b10156134725742816040517f30348040000000000000000000000000000000000000000000000000000000008152600401613469929190616f4f565b60405180910390fd5b50565b5f805f90505b83518110156134e8578273ffffffffffffffffffffffffffffffffffffffff168482815181106134ae576134ad615d2b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036134db5760019150506134ed565b808060010191505061347b565b505f90505b92915050565b60605f8585905003613531576040517fa6a6cb2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8484905067ffffffffffffffff81111561354e5761354d615155565b5b60405190808252806020026020018201604052801561357c5781602001602082028036833780820191505090505b5090505f805b86869050811015613691575f8787838181106135a1576135a0615d2b565b5b9050604002015f013590505f8888848181106135c0576135bf615d2b565b5b90506040020160200160208101906135d89190616321565b90505f6135e483613f44565b90506135ef81613fce565b61ffff16856135fe9190616eef565b945061360a83886141b9565b61361483836141b9565b61361e8883613475565b6136615781886040517fa4c30391000000000000000000000000000000000000000000000000000000008152600401613658929190616f76565b60405180910390fd5b8286858151811061367557613674615d2b565b5b6020026020010181815250505050508080600101915050613582565b506108008111156136dd57610800816040517fe7f4895d0000000000000000000000000000000000000000000000000000000081526004016136d4929190616e87565b60405180910390fd5b50949350505050565b73f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff16632b13591c858585856040518563ffffffff1660e01b81526004016137399493929190616acd565b602060405180830381865afa158015613754573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061377891906159bd565b6137bf57838383836040517f080a113f0000000000000000000000000000000000000000000000000000000081526004016137b69493929190616acd565b60405180910390fd5b50505050565b5f6137d0868361428e565b90505f6138208286868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050613b2c565b90508573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146138945784846040517f2a873d2700000000000000000000000000000000000000000000000000000000815260040161388b929190616fa4565b60405180910390fd5b50505050505050565b600181511115613980575f815f815181106138bb576138ba615d2b565b5b60200260200101516020015190505f600190505b825181101561397d57818382815181106138ec576138eb615d2b565b5b6020026020010151602001511461397057825f815181106139105761390f615d2b565b5b602002602001015183828151811061392b5761392a615d2b565b5b60200260200101516040517fcfae921f000000000000000000000000000000000000000000000000000000008152600401613967929190617026565b60405180910390fd5b80806001019150506138cf565b50505b50565b5f805b82518110156139eb575f8382815181106139a3576139a2615d2b565b5b602002602001015190505f6139b782613f44565b90506139c281613fce565b61ffff16846139d19190616eef565b93506139dc82614361565b50508080600101915050613986565b50610800811115613a3757610800816040517fe7f4895d000000000000000000000000000000000000000000000000000000008152600401613a2e929190616e87565b60405180910390fd5b5050565b5f613a468683614431565b90505f613a968286868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050613b2c565b90508573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613b0a5784846040517f2a873d27000000000000000000000000000000000000000000000000000000008152600401613b01929190616fa4565b60405180910390fd5b50505050505050565b5f613b25613b1f6144fe565b8361450c565b9050919050565b5f805f80613b3a868661454c565b925092509250613b4a82826145a1565b82935050505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663203d0114826040518263ffffffff1660e01b8152600401613ba3919061597a565b602060405180830381865afa158015613bbe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613be291906159bd565b613c2357806040517f2a7c6ef6000000000000000000000000000000000000000000000000000000008152600401613c1a919061597a565b60405180910390fd5b50565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613c82577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381613c7857613c77616d88565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613cbf576d04ee2d6d415b85acef81000000008381613cb557613cb4616d88565b5b0492506020810190505b662386f26fc100008310613cee57662386f26fc100008381613ce457613ce3616d88565b5b0492506010810190505b6305f5e1008310613d17576305f5e1008381613d0d57613d0c616d88565b5b0492506008810190505b6127108310613d3c576127108381613d3257613d31616d88565b5b0492506004810190505b60648310613d5f5760648381613d5557613d54616d88565b5b0492506002810190505b600a8310613d6e576001810190505b80915050919050565b613d7f614703565b613db5576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b613dbf613d77565b5f613dc8613186565b905082816002019081613ddb91906170b3565b5081816003019081613ded91906170b3565b505f801b815f01819055505f801b8160010181905550505050565b613e10613d77565b5f613e19612fa5565b90505f815f015f6101000a81548160ff02191690831515021790555050565b613e40610fac565b613e76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f33905090565b5f613eab7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b614721565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b613edb8261472a565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f81511115613f3757613f3182826147f3565b50613f40565b613f3f614873565b5b5050565b5f8060f860f084901b901c5f1c9050605380811115613f6657613f656159e8565b5b60ff168160ff161115613fb057806040517f641950d7000000000000000000000000000000000000000000000000000000008152600401613fa79190617191565b60405180910390fd5b8060ff166053811115613fc657613fc56159e8565b5b915050919050565b5f806053811115613fe257613fe16159e8565b5b826053811115613ff557613ff46159e8565b5b0361400357600290506141b4565b60026053811115614017576140166159e8565b5b82605381111561402a576140296159e8565b5b0361403857600890506141b4565b6003605381111561404c5761404b6159e8565b5b82605381111561405f5761405e6159e8565b5b0361406d57601090506141b4565b60046053811115614081576140806159e8565b5b826053811115614094576140936159e8565b5b036140a257602090506141b4565b600560538111156140b6576140b56159e8565b5b8260538111156140c9576140c86159e8565b5b036140d757604090506141b4565b600660538111156140eb576140ea6159e8565b5b8260538111156140fe576140fd6159e8565b5b0361410c57608090506141b4565b600760538111156141205761411f6159e8565b5b826053811115614133576141326159e8565b5b036141415760a090506141b4565b60086053811115614155576141546159e8565b5b826053811115614168576141676159e8565b5b036141775761010090506141b4565b816040517fbe7830b10000000000000000000000000000000000000000000000000000000081526004016141ab91906171f0565b60405180910390fd5b919050565b73f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff1663c6528f6983836040518363ffffffff1660e01b8152600401614208929190616b0b565b602060405180830381865afa158015614223573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061424791906159bd565b61428a5781816040517f160a2b4b000000000000000000000000000000000000000000000000000000008152600401614281929190616b0b565b60405180910390fd5b5050565b5f806040518060e0016040528060a9815260200161755460a9913980519060200120845f01518051906020012085602001516040516020016142d09190617295565b604051602081830303815290604052805190602001208660400151876060015188608001518960a0015160405160200161430a9190616ccf565b6040516020818303038152906040528051906020012060405160200161433697969594939291906172ab565b60405160208183030381529060405280519060200120905061435883826148af565b91505092915050565b73f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff16630620326d826040518263ffffffff1660e01b81526004016143ae91906152eb565b602060405180830381865afa1580156143c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143ed91906159bd565b61442e57806040517f4331a85d00000000000000000000000000000000000000000000000000000000815260040161442591906152eb565b60405180910390fd5b50565b5f806040518060c00160405280608781526020016174cd6087913980519060200120845f01518051906020012085602001516040516020016144739190617295565b604051602081830303815290604052805190602001208660400151876060015188608001516040516020016144a89190616ccf565b604051602081830303815290604052805190602001206040516020016144d396959493929190617318565b6040516020818303038152906040528051906020012090506144f583826148af565b91505092915050565b5f614507614923565b905090565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f604184510361458c575f805f602087015192506040870151915060608701515f1a905061457e88828585614986565b95509550955050505061459a565b5f600285515f1b9250925092505b9250925092565b5f60038111156145b4576145b36159e8565b5b8260038111156145c7576145c66159e8565b5b03156146ff57600160038111156145e1576145e06159e8565b5b8260038111156145f4576145f36159e8565b5b0361462b576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561463f5761463e6159e8565b5b826003811115614652576146516159e8565b5b0361469657805f1c6040517ffce698f700000000000000000000000000000000000000000000000000000000815260040161468d9190615a15565b60405180910390fd5b6003808111156146a9576146a86159e8565b5b8260038111156146bc576146bb6159e8565b5b036146fe57806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016146f591906152eb565b60405180910390fd5b5b5050565b5f61470c612b6a565b5f0160089054906101000a900460ff16905090565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361478557806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161477c919061597a565b60405180910390fd5b806147b17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b614721565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff168460405161481c9190616ccf565b5f60405180830381855af49150503d805f8114614854576040519150601f19603f3d011682016040523d82523d5f602084013e614859565b606091505b5091509150614869858383614a6d565b9250505092915050565b5f3411156148ad576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f807f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6148da614afa565b6148e2614b70565b86306040516020016148f8959493929190617377565b60405160208183030381529060405280519060200120905061491a818461450c565b91505092915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61494d614afa565b614955614b70565b463060405160200161496b959493929190617377565b60405160208183030381529060405280519060200120905090565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156149c2575f600385925092509250614a63565b5f6001888888886040515f81526020016040526040516149e594939291906173c8565b6020604051602081039080840390855afa158015614a05573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603614a56575f60015f801b93509350935050614a63565b805f805f1b935093509350505b9450945094915050565b606082614a8257614a7d82614be7565b614af2565b5f8251148015614aa857505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15614aea57836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401614ae1919061597a565b60405180910390fd5b819050614af3565b5b9392505050565b5f80614b04613186565b90505f614b0f6131ad565b90505f81511115614b2b57808051906020012092505050614b6d565b5f825f015490505f801b8114614b4657809350505050614b6d565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f80614b7a613186565b90505f614b8561324b565b90505f81511115614ba157808051906020012092505050614be4565b5f826001015490505f801b8114614bbd57809350505050614be4565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f81511115614bf95780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828054828255905f5260205f20908101928215614c65579160200282015b82811115614c64578251825591602001919060010190614c49565b5b509050614c729190614cc1565b5090565b828054828255905f5260205f20908101928215614cb0579160200282015b82811115614caf578235825591602001919060010190614c94565b5b509050614cbd9190614cc1565b5090565b5b80821115614cd8575f815f905550600101614cc2565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b614cff81614ced565b8114614d09575f80fd5b50565b5f81359050614d1a81614cf6565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112614d4157614d40614d20565b5b8235905067ffffffffffffffff811115614d5e57614d5d614d24565b5b602083019150836001820283011115614d7a57614d79614d28565b5b9250929050565b5f805f805f805f6080888a031215614d9c57614d9b614ce5565b5b5f614da98a828b01614d0c565b975050602088013567ffffffffffffffff811115614dca57614dc9614ce9565b5b614dd68a828b01614d2c565b9650965050604088013567ffffffffffffffff811115614df957614df8614ce9565b5b614e058a828b01614d2c565b9450945050606088013567ffffffffffffffff811115614e2857614e27614ce9565b5b614e348a828b01614d2c565b925092505092959891949750929550565b5f60208284031215614e5a57614e59614ce5565b5b5f614e6784828501614d0c565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614ec282614e99565b9050919050565b614ed281614eb8565b82525050565b5f614ee38383614ec9565b60208301905092915050565b5f602082019050919050565b5f614f0582614e70565b614f0f8185614e7a565b9350614f1a83614e8a565b805f5b83811015614f4a578151614f318882614ed8565b9750614f3c83614eef565b925050600181019050614f1d565b5085935050505092915050565b5f6020820190508181035f830152614f6f8184614efb565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614fae578082015181840152602081019050614f93565b5f8484015250505050565b5f601f19601f8301169050919050565b5f614fd382614f77565b614fdd8185614f81565b9350614fed818560208601614f91565b614ff681614fb9565b840191505092915050565b5f6020820190508181035f8301526150198184614fc9565b905092915050565b5f8083601f84011261503657615035614d20565b5b8235905067ffffffffffffffff81111561505357615052614d24565b5b60208301915083602082028301111561506f5761506e614d28565b5b9250929050565b5f805f806040858703121561508e5761508d614ce5565b5b5f85013567ffffffffffffffff8111156150ab576150aa614ce9565b5b6150b787828801615021565b9450945050602085013567ffffffffffffffff8111156150da576150d9614ce9565b5b6150e687828801614d2c565b925092505092959194509250565b5f8115159050919050565b615108816150f4565b82525050565b5f6020820190506151215f8301846150ff565b92915050565b61513081614eb8565b811461513a575f80fd5b50565b5f8135905061514b81615127565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61518b82614fb9565b810181811067ffffffffffffffff821117156151aa576151a9615155565b5b80604052505050565b5f6151bc614cdc565b90506151c88282615182565b919050565b5f67ffffffffffffffff8211156151e7576151e6615155565b5b6151f082614fb9565b9050602081019050919050565b828183375f83830152505050565b5f61521d615218846151cd565b6151b3565b90508281526020810184848401111561523957615238615151565b5b6152448482856151fd565b509392505050565b5f82601f8301126152605761525f614d20565b5b813561527084826020860161520b565b91505092915050565b5f806040838503121561528f5761528e614ce5565b5b5f61529c8582860161513d565b925050602083013567ffffffffffffffff8111156152bd576152bc614ce9565b5b6152c98582860161524c565b9150509250929050565b5f819050919050565b6152e5816152d3565b82525050565b5f6020820190506152fe5f8301846152dc565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b61533881615304565b82525050565b61534781614ced565b82525050565b61535681614eb8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61538e81614ced565b82525050565b5f61539f8383615385565b60208301905092915050565b5f602082019050919050565b5f6153c18261535c565b6153cb8185615366565b93506153d683615376565b805f5b838110156154065781516153ed8882615394565b97506153f8836153ab565b9250506001810190506153d9565b5085935050505092915050565b5f60e0820190506154265f83018a61532f565b81810360208301526154388189614fc9565b9050818103604083015261544c8188614fc9565b905061545b606083018761533e565b615468608083018661534d565b61547560a08301856152dc565b81810360c083015261548781846153b7565b905098975050505050505050565b5f8083601f8401126154aa576154a9614d20565b5b8235905067ffffffffffffffff8111156154c7576154c6614d24565b5b6020830191508360408202830111156154e3576154e2614d28565b5b9250929050565b5f80fd5b5f60408284031215615503576155026154ea565b5b81905092915050565b5f60408284031215615521576155206154ea565b5b81905092915050565b5f6040828403121561553f5761553e6154ea565b5b81905092915050565b5f805f805f805f805f805f6101208c8e03121561556857615567614ce5565b5b5f8c013567ffffffffffffffff81111561558557615584614ce9565b5b6155918e828f01615495565b9b509b505060206155a48e828f016154ee565b99505060606155b58e828f0161550c565b98505060a08c013567ffffffffffffffff8111156155d6576155d5614ce9565b5b6155e28e828f0161552a565b97505060c08c013567ffffffffffffffff81111561560357615602614ce9565b5b61560f8e828f01614d2c565b965096505060e08c013567ffffffffffffffff81111561563257615631614ce9565b5b61563e8e828f01614d2c565b94509450506101008c013567ffffffffffffffff81111561566257615661614ce9565b5b61566e8e828f01614d2c565b92509250509295989b509295989b9093969950565b5f8083601f84011261569857615697614d20565b5b8235905067ffffffffffffffff8111156156b5576156b4614d24565b5b6020830191508360208202830111156156d1576156d0614d28565b5b9250929050565b5f805f805f805f8060c0898b0312156156f4576156f3614ce5565b5b5f6157018b828c01614d0c565b98505060206157128b828c0161550c565b975050606089013567ffffffffffffffff81111561573357615732614ce9565b5b61573f8b828c01615495565b9650965050608089013567ffffffffffffffff81111561576257615761614ce9565b5b61576e8b828c01615683565b945094505060a089013567ffffffffffffffff81111561579157615790614ce9565b5b61579d8b828c01614d2c565b92509250509295985092959890939650565b5f805f805f805f805f805f6101008c8e0312156157cf576157ce614ce5565b5b5f8c013567ffffffffffffffff8111156157ec576157eb614ce9565b5b6157f88e828f01615495565b9b509b5050602061580b8e828f016154ee565b99505060608c013567ffffffffffffffff81111561582c5761582b614ce9565b5b6158388e828f0161552a565b98505060806158498e828f0161513d565b97505060a08c013567ffffffffffffffff81111561586a57615869614ce9565b5b6158768e828f01614d2c565b965096505060c08c013567ffffffffffffffff81111561589957615898614ce9565b5b6158a58e828f01614d2c565b945094505060e08c013567ffffffffffffffff8111156158c8576158c7614ce9565b5b6158d48e828f01614d2c565b92509250509295989b509295989b9093969950565b5f805f805f6060868803121561590257615901614ce5565b5b5f61590f8882890161513d565b955050602086013567ffffffffffffffff8111156159305761592f614ce9565b5b61593c88828901615495565b9450945050604086013567ffffffffffffffff81111561595f5761595e614ce9565b5b61596b88828901614d2c565b92509250509295509295909350565b5f60208201905061598d5f83018461534d565b92915050565b61599c816150f4565b81146159a6575f80fd5b50565b5f815190506159b781615993565b92915050565b5f602082840312156159d2576159d1614ce5565b5b5f6159df848285016159a9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f602082019050615a285f83018461533e565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680615a7257607f821691505b602082108103615a8557615a84615a2e565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f615ac282614ced565b9150615acd83614ced565b9250828203905081811115615ae557615ae4615a8b565b5b92915050565b5f82825260208201905092915050565b5f615b068385615aeb565b9350615b138385846151fd565b615b1c83614fb9565b840190509392505050565b5f608082019050615b3a5f83018a61533e565b8181036020830152615b4d81888a615afb565b90508181036040830152615b62818688615afb565b90508181036060830152615b77818486615afb565b905098975050505050505050565b5f81905092915050565b5f615b9982614f77565b615ba38185615b85565b9350615bb3818560208601614f91565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f615bf3600283615b85565b9150615bfe82615bbf565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f615c3d600183615b85565b9150615c4882615c09565b600182019050919050565b5f615c5e8287615b8f565b9150615c6982615be7565b9150615c758286615b8f565b9150615c8082615c31565b9150615c8c8285615b8f565b9150615c9782615c31565b9150615ca38284615b8f565b915081905095945050505050565b5f67ffffffffffffffff82169050919050565b615ccd81615cb1565b82525050565b5f602082019050615ce65f830184615cc4565b92915050565b5f81519050615cfa81615127565b92915050565b5f60208284031215615d1557615d14614ce5565b5b5f615d2284828501615cec565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82905092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302615dbe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615d83565b615dc88683615d83565b95508019841693508086168417925050509392505050565b5f819050919050565b5f615e03615dfe615df984614ced565b615de0565b614ced565b9050919050565b5f819050919050565b615e1c83615de9565b615e30615e2882615e0a565b848454615d8f565b825550505050565b5f90565b615e44615e38565b615e4f818484615e13565b505050565b5b81811015615e7257615e675f82615e3c565b600181019050615e55565b5050565b601f821115615eb757615e8881615d62565b615e9184615d74565b81016020851015615ea0578190505b615eb4615eac85615d74565b830182615e54565b50505b505050565b5f82821c905092915050565b5f615ed75f1984600802615ebc565b1980831691505092915050565b5f615eef8383615ec8565b9150826002028217905092915050565b615f098383615d58565b67ffffffffffffffff811115615f2257615f21615155565b5b615f2c8254615a5b565b615f37828285615e76565b5f601f831160018114615f64575f8415615f52578287013590505b615f5c8582615ee4565b865550615fc3565b601f198416615f7286615d62565b5f5b82811015615f9957848901358255600182019150602085019450602081019050615f74565b86831015615fb65784890135615fb2601f891682615ec8565b8355505b6001600288020188555050505b50505050505050565b5f81549050919050565b5f82825260208201905092915050565b5f819050815f5260205f209050919050565b5f82825260208201905092915050565b5f815461601481615a5b565b61601e8186615ff8565b9450600182165f8114616038576001811461604e57616080565b60ff198316865281151560200286019350616080565b61605785615d62565b5f5b8381101561607857815481890152600182019150602081019050616059565b808801955050505b50505092915050565b5f6160948383616008565b905092915050565b5f600182019050919050565b5f6160b282615fcc565b6160bc8185615fd6565b9350836020820285016160ce85615fe6565b805f5b85811015616108578484038952816160e98582616089565b94506160f48361609c565b925060208a019950506001810190506160d1565b50829750879550505050505092915050565b5f6060820190508181035f830152616133818789615afb565b9050818103602083015261614781866160a8565b9050818103604083015261615c818486615afb565b90509695505050505050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f61619c601583614f81565b91506161a782616168565b602082019050919050565b5f6020820190508181035f8301526161c981616190565b9050919050565b5f80fd5b5f80fd5b5f80fd5b5f80833560016020038436030381126161f8576161f76161d0565b5b80840192508235915067ffffffffffffffff82111561621a576162196161d4565b5b602083019250602082023603831315616236576162356161d8565b5b509250929050565b5f60ff82169050919050565b5f61626461625f61625a8461623e565b615de0565b614ced565b9050919050565b6162748161624a565b82525050565b5f60408201905061628d5f83018561626b565b61629a602083018461533e565b9392505050565b5f80fd5b5f80fd5b5f604082840312156162be576162bd6162a1565b5b6162c860406151b3565b90505f6162d784828501614d0c565b5f8301525060206162ea84828501614d0c565b60208301525092915050565b5f6040828403121561630b5761630a614ce5565b5b5f616318848285016162a9565b91505092915050565b5f6020828403121561633657616335614ce5565b5b5f6163438482850161513d565b91505092915050565b5f819050919050565b5f616363602084018461513d565b905092915050565b5f602082019050919050565b5f6163828385614e7a565b935061638d8261634c565b805f5b858110156163c5576163a28284616355565b6163ac8882614ed8565b97506163b78361636b565b925050600181019050616390565b5085925050509392505050565b5f6040820190506163e55f83018661534d565b81810360208301526163f8818486616377565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b616434816152d3565b82525050565b5f616445838361642b565b60208301905092915050565b5f602082019050919050565b5f61646782616402565b616471818561640c565b935061647c8361641c565b805f5b838110156164ac578151616493888261643a565b975061649e83616451565b92505060018101905061647f565b5085935050505092915050565b5f6020820190508181035f8301526164d1818461645d565b905092915050565b5f67ffffffffffffffff8211156164f3576164f2615155565b5b602082029050602081019050919050565b61650d816152d3565b8114616517575f80fd5b50565b5f8151905061652881616504565b92915050565b5f8151905061653c81614cf6565b92915050565b5f67ffffffffffffffff82111561655c5761655b615155565b5b602082029050602081019050919050565b5f61657f61657a84616542565b6151b3565b905080838252602082019050602084028301858111156165a2576165a1614d28565b5b835b818110156165cb57806165b78882615cec565b8452602084019350506020810190506165a4565b5050509392505050565b5f82601f8301126165e9576165e8614d20565b5b81516165f984826020860161656d565b91505092915050565b5f60808284031215616617576166166162a1565b5b61662160806151b3565b90505f6166308482850161651a565b5f8301525060206166438482850161652e565b60208301525060406166578482850161651a565b604083015250606082015167ffffffffffffffff81111561667b5761667a6162a5565b5b616687848285016165d5565b60608301525092915050565b5f6166a56166a0846164d9565b6151b3565b905080838252602082019050602084028301858111156166c8576166c7614d28565b5b835b8181101561670f57805167ffffffffffffffff8111156166ed576166ec614d20565b5b8086016166fa8982616602565b855260208501945050506020810190506166ca565b5050509392505050565b5f82601f83011261672d5761672c614d20565b5b815161673d848260208601616693565b91505092915050565b5f6020828403121561675b5761675a614ce5565b5b5f82015167ffffffffffffffff81111561677857616777614ce9565b5b61678484828501616719565b91505092915050565b5f61679782614ced565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036167c9576167c8615a8b565b5b600182019050919050565b5f81519050919050565b6167e7826167d4565b67ffffffffffffffff811115616800576167ff615155565b5b61680a8254615a5b565b616815828285615e76565b5f60209050601f831160018114616846575f8415616834578287015190505b61683e8582615ee4565b8655506168a5565b601f19841661685486615d62565b5f5b8281101561687b57848901518255600182019150602085019450602081019050616856565b868310156168985784890151616894601f891682615ec8565b8355505b6001600288020188555050505b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6168f082614e70565b6168fa81856168d6565b935061690583614e8a565b805f5b8381101561693557815161691c8882614ed8565b975061692783614eef565b925050600181019050616908565b5085935050505092915050565b5f608083015f8301516169575f86018261642b565b50602083015161696a6020860182615385565b50604083015161697d604086018261642b565b506060830151848203606086015261699582826168e6565b9150508091505092915050565b5f6169ad8383616942565b905092915050565b5f602082019050919050565b5f6169cb826168ad565b6169d581856168b7565b9350836020820285016169e7856168c7565b805f5b85811015616a225784840389528151616a0385826169a2565b9450616a0e836169b5565b925060208a019950506001810190506169ea565b50829750879550505050505092915050565b5f6080820190508181035f830152616a4c81896169c1565b9050616a5b602083018861534d565b8181036040830152616a6e818688615afb565b90508181036060830152616a83818486615afb565b9050979650505050505050565b60408201616aa05f830183616355565b616aac5f850182614ec9565b50616aba6020830183616355565b616ac76020850182614ec9565b50505050565b5f608082019050616ae05f83018761533e565b616aed6020830186616a90565b8181036060830152616b00818486616377565b905095945050505050565b5f604082019050616b1e5f8301856152dc565b616b2b602083018461534d565b9392505050565b5f80fd5b82818337505050565b5f616b4a838561640c565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115616b7d57616b7c616b32565b5b602083029250616b8e838584616b36565b82840190509392505050565b5f6020820190508181035f830152616bb3818486616b3f565b90509392505050565b5f6040820190508181035f830152616bd481866169c1565b90508181036020830152616be9818486615afb565b9050949350505050565b5f81905092915050565b616c06816152d3565b82525050565b5f616c178383616bfd565b60208301905092915050565b5f616c2d82616402565b616c378185616bf3565b9350616c428361641c565b805f5b83811015616c72578151616c598882616c0c565b9750616c6483616451565b925050600181019050616c45565b5085935050505092915050565b5f616c8a8284616c23565b915081905092915050565b5f81905092915050565b5f616ca9826167d4565b616cb38185616c95565b9350616cc3818560208601614f91565b80840191505092915050565b5f616cda8284616c9f565b915081905092915050565b5f60a082019050616cf85f8301886152dc565b616d0560208301876152dc565b616d1260408301866152dc565b616d1f60608301856152dc565b616d2c60808301846152dc565b9695505050505050565b5f604082019050616d495f83018561533e565b616d56602083018461534d565b9392505050565b5f60208284031215616d7257616d71614ce5565b5b5f616d7f8482850161652e565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f60208284031215616dca57616dc9614ce5565b5b5f616dd78482850161651a565b91505092915050565b5f608082019050616df35f8301876152dc565b616e0060208301866152dc565b616e0d60408301856152dc565b616e1a60608301846152dc565b95945050505050565b5f61ffff82169050919050565b5f616e4a616e45616e4084616e23565b615de0565b614ced565b9050919050565b616e5a81616e30565b82525050565b5f604082019050616e735f830185616e51565b616e80602083018461533e565b9392505050565b5f604082019050616e9a5f83018561533e565b616ea7602083018461533e565b9392505050565b5f616eb882614ced565b9150616ec383614ced565b9250828202616ed181614ced565b91508282048414831517616ee857616ee7615a8b565b5b5092915050565b5f616ef982614ced565b9150616f0483614ced565b9250828201905080821115616f1c57616f1b615a8b565b5b92915050565b604082015f820151616f365f850182615385565b506020820151616f496020850182615385565b50505050565b5f606082019050616f625f83018561533e565b616f6f6020830184616f22565b9392505050565b5f604082019050616f895f83018561534d565b8181036020830152616f9b8184614efb565b90509392505050565b5f6020820190508181035f830152616fbd818486615afb565b90509392505050565b5f608083015f830151616fdb5f86018261642b565b506020830151616fee6020860182615385565b506040830151617001604086018261642b565b506060830151848203606086015261701982826168e6565b9150508091505092915050565b5f6040820190508181035f83015261703e8185616fc6565b905081810360208301526170528184616fc6565b90509392505050565b5f819050815f5260205f209050919050565b601f8211156170ae5761707f8161705b565b61708884615d74565b81016020851015617097578190505b6170ab6170a385615d74565b830182615e54565b50505b505050565b6170bc82614f77565b67ffffffffffffffff8111156170d5576170d4615155565b5b6170df8254615a5b565b6170ea82828561706d565b5f60209050601f83116001811461711b575f8415617109578287015190505b6171138582615ee4565b86555061717a565b601f1984166171298661705b565b5f5b828110156171505784890151825560018201915060208501945060208101905061712b565b8683101561716d5784890151617169601f891682615ec8565b8355505b6001600288020188555050505b505050505050565b61718b8161623e565b82525050565b5f6020820190506171a45f830184617182565b92915050565b605481106171bb576171ba6159e8565b5b50565b5f8190506171cb826171aa565b919050565b5f6171da826171be565b9050919050565b6171ea816171d0565b82525050565b5f6020820190506172035f8301846171e1565b92915050565b5f81905092915050565b61721c81614eb8565b82525050565b5f61722d8383617213565b60208301905092915050565b5f61724382614e70565b61724d8185617209565b935061725883614e8a565b805f5b8381101561728857815161726f8882617222565b975061727a83614eef565b92505060018101905061725b565b5085935050505092915050565b5f6172a08284617239565b915081905092915050565b5f60e0820190506172be5f83018a6152dc565b6172cb60208301896152dc565b6172d860408301886152dc565b6172e5606083018761534d565b6172f2608083018661533e565b6172ff60a083018561533e565b61730c60c08301846152dc565b98975050505050505050565b5f60c08201905061732b5f8301896152dc565b61733860208301886152dc565b61734560408301876152dc565b617352606083018661533e565b61735f608083018561533e565b61736c60a08301846152dc565b979650505050505050565b5f60a08201905061738a5f8301886152dc565b61739760208301876152dc565b6173a460408301866152dc565b6173b1606083018561533e565b6173be608083018461534d565b9695505050505050565b5f6080820190506173db5f8301876152dc565b6173e86020830186617182565b6173f560408301856152dc565b61740260608301846152dc565b9594505050505056fe5573657244656372797074526573706f6e7365566572696669636174696f6e286279746573207075626c69634b65792c627974657333325b5d20637448616e646c65732c6279746573207573657244656372797074656453686172652c627974657320657874726144617461295075626c696344656372797074566572696669636174696f6e28627974657333325b5d20637448616e646c65732c627974657320646563727970746564526573756c742c62797465732065787472614461746129557365724465637279707452657175657374566572696669636174696f6e286279746573207075626c69634b65792c616464726573735b5d20636f6e74726163744164647265737365732c75696e7432353620737461727454696d657374616d702c75696e74323536206475726174696f6e446179732c6279746573206578747261446174612944656c656761746564557365724465637279707452657175657374566572696669636174696f6e286279746573207075626c69634b65792c616464726573735b5d20636f6e74726163744164647265737365732c616464726573732064656c656761746f72416464726573732c75696e7432353620737461727454696d657374616d702c75696e74323536206475726174696f6e446179732c62797465732065787472614461746129 + ///0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801562000043575f80fd5b50620000546200005a60201b60201c565b620001c4565b5f6200006b6200015e60201b60201c565b9050805f0160089054906101000a900460ff1615620000b6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146200015b5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051620001529190620001a9565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b620001a38162000185565b82525050565b5f602082019050620001be5f83018462000198565b92915050565b60805161666e620001eb5f395f818161233a0152818161238f0152612631015261666e5ff3fe6080604052600436106100fd575f3560e01c806358f5b8ab1161009457806384b0196e1161006357806384b0196e146102e1578063ad3cb1cc14610311578063d8998f451461033b578063f1b57adb14610363578063fbb832591461038b576100fd565b806358f5b8ab1461023d5780635c975abb146102795780636f8913bc146102a35780638456cb59146102cb576100fd565b80633f4ba83a116100d05780633f4ba83a146101a55780634014c4cd146101bb5780634f1ef286146101f757806352d1902d14610213576100fd565b8063046f9eb3146101015780630900cc69146101295780630d8e6e2c1461016557806339f738101461018f575b5f80fd5b34801561010c575f80fd5b5061012760048036038101906101229190614208565b6103c7565b005b348015610134575f80fd5b5061014f600480360381019061014a91906142cc565b610853565b60405161015c91906143de565b60405180910390f35b348015610170575f80fd5b50610179610924565b6040516101869190614488565b60405180910390f35b34801561019a575f80fd5b506101a361099f565b005b3480156101b0575f80fd5b506101b9610bd7565b005b3480156101c6575f80fd5b506101e160048036038101906101dc91906144fd565b610d1f565b6040516101ee9190614595565b60405180910390f35b610211600480360381019061020c9190614700565b610eac565b005b34801561021e575f80fd5b50610227610ecb565b6040516102349190614772565b60405180910390f35b348015610248575f80fd5b50610263600480360381019061025e91906142cc565b610efc565b6040516102709190614595565b60405180910390f35b348015610284575f80fd5b5061028d610f2f565b60405161029a9190614595565b60405180910390f35b3480156102ae575f80fd5b506102c960048036038101906102c49190614208565b610f51565b005b3480156102d6575f80fd5b506102df611358565b005b3480156102ec575f80fd5b506102f561147d565b604051610308979695949392919061489a565b60405180910390f35b34801561031c575f80fd5b50610325611586565b6040516103329190614488565b60405180910390f35b348015610346575f80fd5b50610361600480360381019061035c91906144fd565b6115bf565b005b34801561036e575f80fd5b50610389600480360381019061038491906149b1565b61177d565b005b348015610396575f80fd5b506103b160048036038101906103ac9190614aeb565b611c2e565b6040516103be9190614595565b60405180910390f35b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b81526004016104149190614b7c565b602060405180830381865afa15801561042f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104539190614bbf565b61049457336040517faee8632300000000000000000000000000000000000000000000000000000000815260040161048b9190614b7c565b60405180910390fd5b5f61049d611e9d565b905060f8600260058111156104b5576104b4614bea565b5b901b881115806104c85750806008015488115b1561050a57876040517fd48af9420000000000000000000000000000000000000000000000000000000081526004016105019190614c17565b60405180910390fd5b5f816007015f8a81526020019081526020015f206040518060400160405290815f8201805461053890614c5d565b80601f016020809104026020016040519081016040528092919081815260200182805461056490614c5d565b80156105af5780601f10610586576101008083540402835291602001916105af565b820191905f5260205f20905b81548152906001019060200180831161059257829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561060557602002820191905f5260205f20905b8154815260200190600101908083116105f1575b50505050508152505090505f6040518060800160405280835f01518152602001836020015181526020018a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081525090505f6106cb82611ec4565b90506106d98b828a8a611f8b565b5f846002015f8d81526020019081526020015f205f805f1b81526020019081526020015f2090508033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b7f7fcdfb5381917f554a717d0a5470a33f5a49ba6445f05ec43c74c0bc2cc608b2600183805490506107929190614cba565b8d8d8d8d8d8d6040516107ab9796959493929190614d29565b60405180910390a2845f015f8d81526020019081526020015f205f9054906101000a900460ff161580156107e857506107e781805490506120fc565b5b15610845576001855f015f8e81526020019081526020015f205f6101000a81548160ff0219169083151502179055508b7fe89752be0ecdb68b2a6eb5ef1a891039e0e92ae3c8a62274c5881e48eea1ed2560405160405180910390a25b505050505050505050505050565b60605f61085e611e9d565b90505f816003015f8581526020019081526020015f20549050816002015f8581526020019081526020015f205f8281526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561091657602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116108cd575b505050505092505050919050565b60606040518060400160405280600a81526020017f44656372797074696f6e000000000000000000000000000000000000000000008152506109655f61218d565b61096f600161218d565b6109785f61218d565b60405160200161098b9493929190614e55565b604051602081830303815290604052905090565b60016109a9612257565b67ffffffffffffffff16146109ea576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f6109f561227b565b9050805f0160089054906101000a900460ff1680610a3d57508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b15610a74576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff021916908315150217905550610b2d6040518060400160405280600a81526020017f44656372797074696f6e000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506122a2565b610b356122b8565b5f610b3e611e9d565b905060f860016005811115610b5657610b55614bea565b5b901b816006018190555060f860026005811115610b7657610b75614bea565b5b901b8160080181905550505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d282604051610bcb9190614ed5565b60405180910390a15050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c589190614f02565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610cd3575073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610d1557336040517fe19166ee000000000000000000000000000000000000000000000000000000008152600401610d0c9190614b7c565b60405180910390fd5b610d1d6122ca565b565b5f805f90505b85859050811015610e9e5773f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff16630620326d878784818110610d7357610d72614f2d565b5b905060200201356040518263ffffffff1660e01b8152600401610d969190614772565b602060405180830381865afa158015610db1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd59190614bbf565b1580610e83575073c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff16632ddc9a6f878784818110610e1f57610e1e614f2d565b5b905060200201356040518263ffffffff1660e01b8152600401610e429190614772565b602060405180830381865afa158015610e5d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e819190614bbf565b155b15610e91575f915050610ea4565b8080600101915050610d25565b50600190505b949350505050565b610eb4612338565b610ebd8261241e565b610ec78282612511565b5050565b5f610ed461262f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b5f80610f06611e9d565b9050805f015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b5f80610f396126b6565b9050805f015f9054906101000a900460ff1691505090565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b8152600401610f9e9190614b7c565b602060405180830381865afa158015610fb9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fdd9190614bbf565b61101e57336040517faee863230000000000000000000000000000000000000000000000000000000081526004016110159190614b7c565b60405180910390fd5b5f611027611e9d565b905060f86001600581111561103f5761103e614bea565b5b901b881115806110525750806006015488115b1561109457876040517fd48af94200000000000000000000000000000000000000000000000000000000815260040161108b9190614c17565b60405180910390fd5b5f6040518060600160405280836005015f8c81526020019081526020015f208054806020026020016040519081016040528092919081815260200182805480156110fb57602002820191905f5260205f20905b8154815260200190600101908083116110e7575b5050505050815260200189898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081525090505f6111a1826126dd565b90506111af8a828989611f8b565b5f836004015f8c81526020019081526020015f205f8381526020019081526020015f20905080888890918060018154018082558091505060019003905f5260205f20015f90919290919290919290919250918261120d929190615101565b50836002015f8c81526020019081526020015f205f8381526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550835f015f8c81526020019081526020015f205f9054906101000a900460ff161580156112c357506112c28180549050612797565b5b1561134b576001845f015f8d81526020019081526020015f205f6101000a81548160ff02191690831515021790555081846003015f8d81526020019081526020015f20819055508a7fd7e58a367a0a6c298e76ad5d240004e327aa1423cbe4bd7ff85d4c715ef8d15f8b8b848a8a60405161134295949392919061531c565b60405180910390a25b5050505050505050505050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff166346fbf68e336040518263ffffffff1660e01b81526004016113a59190614b7c565b602060405180830381865afa1580156113c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e49190614bbf565b158015611431575073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561147357336040517f388916bb00000000000000000000000000000000000000000000000000000000815260040161146a9190614b7c565b60405180910390fd5b61147b612828565b565b5f6060805f805f60605f61148f612897565b90505f801b815f01541480156114aa57505f801b8160010154145b6114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e0906153b4565b60405180910390fd5b6114f16128be565b6114f961295c565b46305f801b5f67ffffffffffffffff811115611518576115176145dc565b5b6040519080825280602002602001820160405280156115465781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6115c76129fa565b5f8484905003611603576040517f2de7543800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61164c8484808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f82011690508083019250505050505050612a3b565b5f73c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff1663a14f897186866040518363ffffffff1660e01b815260040161169c92919061544a565b5f60405180830381865afa1580156116b6573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906116de91906156e1565b90506116e981612af3565b5f6116f2611e9d565b9050806006015f81548092919061170890615728565b91905055505f816006015490508686836005015f8481526020019081526020015f2091906117379291906140b2565b50807f22db480a39bd72556438aadb4a32a3d2a6638b87c03bbec5fef6997e109587ff84878760405161176c93929190615905565b60405180910390a250505050505050565b6117856129fa565b5f8880602001906117969190615948565b9050036117cf576040517f57cfa21700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a60ff168880602001906117e49190615948565b9050111561183d57600a8880602001906117fe9190615948565b90506040517faf1f04950000000000000000000000000000000000000000000000000000000081526004016118349291906159e6565b60405180910390fd5b611856898036038101906118519190615a5a565b612bd9565b6118ae8880602001906118699190615948565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505088612d24565b1561190257868880602001906118c49190615948565b6040517fdc4d78b10000000000000000000000000000000000000000000000000000000081526004016118f993929190615b0b565b60405180910390fd5b5f61195d8c8c8b80602001906119189190615948565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508b612da2565b90505f6040518060a0016040528089898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081526020018b80602001906119c49190615948565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505081526020018c5f013581526020018c60200135815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050508152509050611a74818a88888e5f0135612f95565b5f73c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff1663a14f8971846040518263ffffffff1660e01b8152600401611ac29190615bd3565b5f60405180830381865afa158015611adc573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611b0491906156e1565b9050611b0f81612af3565b5f611b18611e9d565b9050806008015f815480929190611b2e90615728565b91905055505f8160080154905060405180604001604052808c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815260200186815250826007015f8381526020019081526020015f205f820151815f019081611bb99190615bfd565b506020820151816001019080519060200190611bd69291906140fd565b50905050807ff9011bd6ba0da6049c520d70fe5971f17ed7ab795486052544b51019896c596b848e8e8e8c8c604051611c1496959493929190615ccc565b60405180910390a250505050505050505050505050505050565b5f805f90505b85859050811015611e8e5773f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff1663c6528f69878784818110611c8257611c81614f2d565b5b9050604002015f0135896040518363ffffffff1660e01b8152600401611ca9929190615d28565b602060405180830381865afa158015611cc4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ce89190614bbf565b1580611dc4575073f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff1663c6528f69878784818110611d3257611d31614f2d565b5b9050604002015f0135888885818110611d4e57611d4d614f2d565b5b9050604002016020016020810190611d669190615d4f565b6040518363ffffffff1660e01b8152600401611d83929190615d28565b602060405180830381865afa158015611d9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc29190614bbf565b155b80611e73575073c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff16632ddc9a6f878784818110611e0d57611e0c614f2d565b5b9050604002015f01356040518263ffffffff1660e01b8152600401611e329190614772565b602060405180830381865afa158015611e4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e719190614bbf565b155b15611e81575f915050611e94565b8080600101915050611c34565b50600190505b95945050505050565b5f7f68113e68af494c6efd0210fc4bf9ba748d1ffadaa4718217fdf63548c4aee700905090565b5f611f846040518060a00160405280606d8152602001616526606d913980519060200120835f0151805190602001208460200151604051602001611f089190615e06565b604051602081830303815290604052805190602001208560400151805190602001208660600151604051602001611f3f9190615e56565b60405160208183030381529060405280519060200120604051602001611f69959493929190615e6c565b6040516020818303038152906040528051906020012061306d565b9050919050565b5f611f94611e9d565b90505f611fe48585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050613086565b9050611fef816130b0565b816001015f8781526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561208e5785816040517f99ec48d9000000000000000000000000000000000000000000000000000000008152600401612085929190615ebd565b60405180910390fd5b6001826001015f8881526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505050505050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663c2b429866040518163ffffffff1660e01b8152600401602060405180830381865afa15801561215b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061217f9190615ee4565b905080831015915050919050565b60605f600161219b84613180565b0190505f8167ffffffffffffffff8111156121b9576121b86145dc565b5b6040519080825280601f01601f1916602001820160405280156121eb5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561224c578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161224157612240615f0f565b5b0494505f85036121f8575b819350505050919050565b5f61226061227b565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6122aa6132d1565b6122b48282613311565b5050565b6122c06132d1565b6122c8613362565b565b6122d2613392565b5f6122db6126b6565b90505f815f015f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6123206133d2565b60405161232d9190614b7c565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614806123e557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166123cc6133d9565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561241c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561247b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249f9190614f02565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461250e57336040517f0e56cf3d0000000000000000000000000000000000000000000000000000000081526004016125059190614b7c565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561257957506040513d601f19601f820116820180604052508101906125769190615f3c565b60015b6125ba57816040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016125b19190614b7c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461262057806040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004016126179190614772565b60405180910390fd5b61262a838361342c565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146126b4576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300905090565b5f6127906040518060800160405280605481526020016165936054913980519060200120835f01516040516020016127159190615e06565b60405160208183030381529060405280519060200120846020015180519060200120856040015160405160200161274c9190615e56565b604051602081830303815290604052805190602001206040516020016127759493929190615f67565b6040516020818303038152906040528051906020012061306d565b9050919050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632a3889986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061281a9190615ee4565b905080831015915050919050565b6128306129fa565b5f6128396126b6565b90506001815f015f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861287f6133d2565b60405161288c9190614b7c565b60405180910390a150565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f6128c9612897565b90508060020180546128da90614c5d565b80601f016020809104026020016040519081016040528092919081815260200182805461290690614c5d565b80156129515780601f1061292857610100808354040283529160200191612951565b820191905f5260205f20905b81548152906001019060200180831161293457829003601f168201915b505050505091505090565b60605f612967612897565b905080600301805461297890614c5d565b80601f01602080910402602001604051908101604052809291908181526020018280546129a490614c5d565b80156129ef5780601f106129c6576101008083540402835291602001916129ef565b820191905f5260205f20905b8154815290600101906020018083116129d257829003601f168201915b505050505091505090565b612a02610f2f565b15612a39576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f805b8251811015612aa3575f838281518110612a5b57612a5a614f2d565b5b602002602001015190505f612a6f8261349e565b9050612a7a81613528565b61ffff1684612a899190615faa565b9350612a9482613713565b50508080600101915050612a3e565b50610800811115612aef57610800816040517fe7f4895d000000000000000000000000000000000000000000000000000000008152600401612ae6929190615fdd565b60405180910390fd5b5050565b600181511115612bd6575f815f81518110612b1157612b10614f2d565b5b60200260200101516020015190505f600190505b8251811015612bd35781838281518110612b4257612b41614f2d565b5b60200260200101516020015114612bc657825f81518110612b6657612b65614f2d565b5b6020026020010151838281518110612b8157612b80614f2d565b5b60200260200101516040517fcfae921f000000000000000000000000000000000000000000000000000000008152600401612bbd929190616064565b60405180910390fd5b8080600101915050612b25565b50505b50565b5f816020015103612c16576040517fde2859c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61016d61ffff1681602001511115612c6d5761016d81602001516040517f32951863000000000000000000000000000000000000000000000000000000008152600401612c649291906160d6565b60405180910390fd5b42815f01511115612cba5742815f01516040517ff24c0887000000000000000000000000000000000000000000000000000000008152600401612cb1929190615fdd565b60405180910390fd5b42620151808260200151612cce91906160fd565b825f0151612cdc9190615faa565b1015612d215742816040517f30348040000000000000000000000000000000000000000000000000000000008152600401612d1892919061616b565b60405180910390fd5b50565b5f805f90505b8351811015612d97578273ffffffffffffffffffffffffffffffffffffffff16848281518110612d5d57612d5c614f2d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603612d8a576001915050612d9c565b8080600101915050612d2a565b505f90505b92915050565b60605f8585905003612de0576040517fa6a6cb2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8484905067ffffffffffffffff811115612dfd57612dfc6145dc565b5b604051908082528060200260200182016040528015612e2b5781602001602082028036833780820191505090505b5090505f805b86869050811015612f40575f878783818110612e5057612e4f614f2d565b5b9050604002015f013590505f888884818110612e6f57612e6e614f2d565b5b9050604002016020016020810190612e879190615d4f565b90505f612e938361349e565b9050612e9e81613528565b61ffff1685612ead9190615faa565b9450612eb983886137e3565b612ec383836137e3565b612ecd8883612d24565b612f105781886040517fa4c30391000000000000000000000000000000000000000000000000000000008152600401612f07929190616192565b60405180910390fd5b82868581518110612f2457612f23614f2d565b5b6020026020010181815250505050508080600101915050612e31565b50610800811115612f8c57610800816040517fe7f4895d000000000000000000000000000000000000000000000000000000008152600401612f83929190615fdd565b60405180910390fd5b50949350505050565b5f612fa086836138b8565b90505f612ff08286868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050613086565b90508573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146130645784846040517f2a873d2700000000000000000000000000000000000000000000000000000000815260040161305b9291906161c0565b60405180910390fd5b50505050505050565b5f61307f613079613985565b83613993565b9050919050565b5f805f8061309486866139d3565b9250925092506130a48282613a28565b82935050505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663203d0114826040518263ffffffff1660e01b81526004016130fd9190614b7c565b602060405180830381865afa158015613118573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061313c9190614bbf565b61317d57806040517f2a7c6ef60000000000000000000000000000000000000000000000000000000081526004016131749190614b7c565b60405180910390fd5b50565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106131dc577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816131d2576131d1615f0f565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613219576d04ee2d6d415b85acef8100000000838161320f5761320e615f0f565b5b0492506020810190505b662386f26fc10000831061324857662386f26fc10000838161323e5761323d615f0f565b5b0492506010810190505b6305f5e1008310613271576305f5e100838161326757613266615f0f565b5b0492506008810190505b612710831061329657612710838161328c5761328b615f0f565b5b0492506004810190505b606483106132b957606483816132af576132ae615f0f565b5b0492506002810190505b600a83106132c8576001810190505b80915050919050565b6132d9613b8a565b61330f576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6133196132d1565b5f613322612897565b905082816002019081613335919061623a565b5081816003019081613347919061623a565b505f801b815f01819055505f801b8160010181905550505050565b61336a6132d1565b5f6133736126b6565b90505f815f015f6101000a81548160ff02191690831515021790555050565b61339a610f2f565b6133d0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f33905090565b5f6134057f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b613ba8565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61343582613bb1565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156134915761348b8282613c7a565b5061349a565b613499613cfa565b5b5050565b5f8060f860f084901b901c5f1c90506053808111156134c0576134bf614bea565b5b60ff168160ff16111561350a57806040517f641950d70000000000000000000000000000000000000000000000000000000081526004016135019190616318565b60405180910390fd5b8060ff1660538111156135205761351f614bea565b5b915050919050565b5f80605381111561353c5761353b614bea565b5b82605381111561354f5761354e614bea565b5b0361355d576002905061370e565b6002605381111561357157613570614bea565b5b82605381111561358457613583614bea565b5b03613592576008905061370e565b600360538111156135a6576135a5614bea565b5b8260538111156135b9576135b8614bea565b5b036135c7576010905061370e565b600460538111156135db576135da614bea565b5b8260538111156135ee576135ed614bea565b5b036135fc576020905061370e565b600560538111156136105761360f614bea565b5b82605381111561362357613622614bea565b5b03613631576040905061370e565b6006605381111561364557613644614bea565b5b82605381111561365857613657614bea565b5b03613666576080905061370e565b6007605381111561367a57613679614bea565b5b82605381111561368d5761368c614bea565b5b0361369b5760a0905061370e565b600860538111156136af576136ae614bea565b5b8260538111156136c2576136c1614bea565b5b036136d157610100905061370e565b816040517fbe7830b10000000000000000000000000000000000000000000000000000000081526004016137059190616377565b60405180910390fd5b919050565b73f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff16630620326d826040518263ffffffff1660e01b81526004016137609190614772565b602060405180830381865afa15801561377b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061379f9190614bbf565b6137e057806040517f4331a85d0000000000000000000000000000000000000000000000000000000081526004016137d79190614772565b60405180910390fd5b50565b73f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff1663c6528f6983836040518363ffffffff1660e01b8152600401613832929190615d28565b602060405180830381865afa15801561384d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138719190614bbf565b6138b45781816040517f160a2b4b0000000000000000000000000000000000000000000000000000000081526004016138ab929190615d28565b60405180910390fd5b5050565b5f806040518060c00160405280608781526020016165e76087913980519060200120845f01518051906020012085602001516040516020016138fa919061641c565b6040516020818303038152906040528051906020012086604001518760600151886080015160405160200161392f9190615e56565b6040516020818303038152906040528051906020012060405160200161395a96959493929190616432565b60405160208183030381529060405280519060200120905061397c8382613d36565b91505092915050565b5f61398e613daa565b905090565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f6041845103613a13575f805f602087015192506040870151915060608701515f1a9050613a0588828585613e0d565b955095509550505050613a21565b5f600285515f1b9250925092505b9250925092565b5f6003811115613a3b57613a3a614bea565b5b826003811115613a4e57613a4d614bea565b5b0315613b865760016003811115613a6857613a67614bea565b5b826003811115613a7b57613a7a614bea565b5b03613ab2576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115613ac657613ac5614bea565b5b826003811115613ad957613ad8614bea565b5b03613b1d57805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401613b149190614c17565b60405180910390fd5b600380811115613b3057613b2f614bea565b5b826003811115613b4357613b42614bea565b5b03613b8557806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401613b7c9190614772565b60405180910390fd5b5b5050565b5f613b9361227b565b5f0160089054906101000a900460ff16905090565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b03613c0c57806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401613c039190614b7c565b60405180910390fd5b80613c387f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b613ba8565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff1684604051613ca39190615e56565b5f60405180830381855af49150503d805f8114613cdb576040519150601f19603f3d011682016040523d82523d5f602084013e613ce0565b606091505b5091509150613cf0858383613ef4565b9250505092915050565b5f341115613d34576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f807f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613d61613f81565b613d69613ff7565b8630604051602001613d7f959493929190616491565b604051602081830303815290604052805190602001209050613da18184613993565b91505092915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613dd4613f81565b613ddc613ff7565b4630604051602001613df2959493929190616491565b60405160208183030381529060405280519060200120905090565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115613e49575f600385925092509250613eea565b5f6001888888886040515f8152602001604052604051613e6c94939291906164e2565b6020604051602081039080840390855afa158015613e8c573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613edd575f60015f801b93509350935050613eea565b805f805f1b935093509350505b9450945094915050565b606082613f0957613f048261406e565b613f79565b5f8251148015613f2f57505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15613f7157836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401613f689190614b7c565b60405180910390fd5b819050613f7a565b5b9392505050565b5f80613f8b612897565b90505f613f966128be565b90505f81511115613fb257808051906020012092505050613ff4565b5f825f015490505f801b8114613fcd57809350505050613ff4565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f80614001612897565b90505f61400c61295c565b90505f815111156140285780805190602001209250505061406b565b5f826001015490505f801b81146140445780935050505061406b565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f815111156140805780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828054828255905f5260205f209081019282156140ec579160200282015b828111156140eb5782358255916020019190600101906140d0565b5b5090506140f99190614148565b5090565b828054828255905f5260205f20908101928215614137579160200282015b8281111561413657825182559160200191906001019061411b565b5b5090506141449190614148565b5090565b5b8082111561415f575f815f905550600101614149565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61418681614174565b8114614190575f80fd5b50565b5f813590506141a18161417d565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126141c8576141c76141a7565b5b8235905067ffffffffffffffff8111156141e5576141e46141ab565b5b602083019150836001820283011115614201576142006141af565b5b9250929050565b5f805f805f805f6080888a0312156142235761422261416c565b5b5f6142308a828b01614193565b975050602088013567ffffffffffffffff81111561425157614250614170565b5b61425d8a828b016141b3565b9650965050604088013567ffffffffffffffff8111156142805761427f614170565b5b61428c8a828b016141b3565b9450945050606088013567ffffffffffffffff8111156142af576142ae614170565b5b6142bb8a828b016141b3565b925092505092959891949750929550565b5f602082840312156142e1576142e061416c565b5b5f6142ee84828501614193565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61434982614320565b9050919050565b6143598161433f565b82525050565b5f61436a8383614350565b60208301905092915050565b5f602082019050919050565b5f61438c826142f7565b6143968185614301565b93506143a183614311565b805f5b838110156143d15781516143b8888261435f565b97506143c383614376565b9250506001810190506143a4565b5085935050505092915050565b5f6020820190508181035f8301526143f68184614382565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561443557808201518184015260208101905061441a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61445a826143fe565b6144648185614408565b9350614474818560208601614418565b61447d81614440565b840191505092915050565b5f6020820190508181035f8301526144a08184614450565b905092915050565b5f8083601f8401126144bd576144bc6141a7565b5b8235905067ffffffffffffffff8111156144da576144d96141ab565b5b6020830191508360208202830111156144f6576144f56141af565b5b9250929050565b5f805f80604085870312156145155761451461416c565b5b5f85013567ffffffffffffffff81111561453257614531614170565b5b61453e878288016144a8565b9450945050602085013567ffffffffffffffff81111561456157614560614170565b5b61456d878288016141b3565b925092505092959194509250565b5f8115159050919050565b61458f8161457b565b82525050565b5f6020820190506145a85f830184614586565b92915050565b6145b78161433f565b81146145c1575f80fd5b50565b5f813590506145d2816145ae565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61461282614440565b810181811067ffffffffffffffff82111715614631576146306145dc565b5b80604052505050565b5f614643614163565b905061464f8282614609565b919050565b5f67ffffffffffffffff82111561466e5761466d6145dc565b5b61467782614440565b9050602081019050919050565b828183375f83830152505050565b5f6146a461469f84614654565b61463a565b9050828152602081018484840111156146c0576146bf6145d8565b5b6146cb848285614684565b509392505050565b5f82601f8301126146e7576146e66141a7565b5b81356146f7848260208601614692565b91505092915050565b5f80604083850312156147165761471561416c565b5b5f614723858286016145c4565b925050602083013567ffffffffffffffff81111561474457614743614170565b5b614750858286016146d3565b9150509250929050565b5f819050919050565b61476c8161475a565b82525050565b5f6020820190506147855f830184614763565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6147bf8161478b565b82525050565b6147ce81614174565b82525050565b6147dd8161433f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61481581614174565b82525050565b5f614826838361480c565b60208301905092915050565b5f602082019050919050565b5f614848826147e3565b61485281856147ed565b935061485d836147fd565b805f5b8381101561488d578151614874888261481b565b975061487f83614832565b925050600181019050614860565b5085935050505092915050565b5f60e0820190506148ad5f83018a6147b6565b81810360208301526148bf8189614450565b905081810360408301526148d38188614450565b90506148e260608301876147c5565b6148ef60808301866147d4565b6148fc60a0830185614763565b81810360c083015261490e818461483e565b905098975050505050505050565b5f8083601f840112614931576149306141a7565b5b8235905067ffffffffffffffff81111561494e5761494d6141ab565b5b60208301915083604082028301111561496a576149696141af565b5b9250929050565b5f80fd5b5f6040828403121561498a57614989614971565b5b81905092915050565b5f604082840312156149a8576149a7614971565b5b81905092915050565b5f805f805f805f805f805f6101008c8e0312156149d1576149d061416c565b5b5f8c013567ffffffffffffffff8111156149ee576149ed614170565b5b6149fa8e828f0161491c565b9b509b50506020614a0d8e828f01614975565b99505060608c013567ffffffffffffffff811115614a2e57614a2d614170565b5b614a3a8e828f01614993565b9850506080614a4b8e828f016145c4565b97505060a08c013567ffffffffffffffff811115614a6c57614a6b614170565b5b614a788e828f016141b3565b965096505060c08c013567ffffffffffffffff811115614a9b57614a9a614170565b5b614aa78e828f016141b3565b945094505060e08c013567ffffffffffffffff811115614aca57614ac9614170565b5b614ad68e828f016141b3565b92509250509295989b509295989b9093969950565b5f805f805f60608688031215614b0457614b0361416c565b5b5f614b11888289016145c4565b955050602086013567ffffffffffffffff811115614b3257614b31614170565b5b614b3e8882890161491c565b9450945050604086013567ffffffffffffffff811115614b6157614b60614170565b5b614b6d888289016141b3565b92509250509295509295909350565b5f602082019050614b8f5f8301846147d4565b92915050565b614b9e8161457b565b8114614ba8575f80fd5b50565b5f81519050614bb981614b95565b92915050565b5f60208284031215614bd457614bd361416c565b5b5f614be184828501614bab565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f602082019050614c2a5f8301846147c5565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614c7457607f821691505b602082108103614c8757614c86614c30565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614cc482614174565b9150614ccf83614174565b9250828203905081811115614ce757614ce6614c8d565b5b92915050565b5f82825260208201905092915050565b5f614d088385614ced565b9350614d15838584614684565b614d1e83614440565b840190509392505050565b5f608082019050614d3c5f83018a6147c5565b8181036020830152614d4f81888a614cfd565b90508181036040830152614d64818688614cfd565b90508181036060830152614d79818486614cfd565b905098975050505050505050565b5f81905092915050565b5f614d9b826143fe565b614da58185614d87565b9350614db5818560208601614418565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f614df5600283614d87565b9150614e0082614dc1565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f614e3f600183614d87565b9150614e4a82614e0b565b600182019050919050565b5f614e608287614d91565b9150614e6b82614de9565b9150614e778286614d91565b9150614e8282614e33565b9150614e8e8285614d91565b9150614e9982614e33565b9150614ea58284614d91565b915081905095945050505050565b5f67ffffffffffffffff82169050919050565b614ecf81614eb3565b82525050565b5f602082019050614ee85f830184614ec6565b92915050565b5f81519050614efc816145ae565b92915050565b5f60208284031215614f1757614f1661416c565b5b5f614f2484828501614eee565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82905092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302614fc07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614f85565b614fca8683614f85565b95508019841693508086168417925050509392505050565b5f819050919050565b5f615005615000614ffb84614174565b614fe2565b614174565b9050919050565b5f819050919050565b61501e83614feb565b61503261502a8261500c565b848454614f91565b825550505050565b5f90565b61504661503a565b615051818484615015565b505050565b5b81811015615074576150695f8261503e565b600181019050615057565b5050565b601f8211156150b95761508a81614f64565b61509384614f76565b810160208510156150a2578190505b6150b66150ae85614f76565b830182615056565b50505b505050565b5f82821c905092915050565b5f6150d95f19846008026150be565b1980831691505092915050565b5f6150f183836150ca565b9150826002028217905092915050565b61510b8383614f5a565b67ffffffffffffffff811115615124576151236145dc565b5b61512e8254614c5d565b615139828285615078565b5f601f831160018114615166575f8415615154578287013590505b61515e85826150e6565b8655506151c5565b601f19841661517486614f64565b5f5b8281101561519b57848901358255600182019150602085019450602081019050615176565b868310156151b857848901356151b4601f8916826150ca565b8355505b6001600288020188555050505b50505050505050565b5f81549050919050565b5f82825260208201905092915050565b5f819050815f5260205f209050919050565b5f82825260208201905092915050565b5f815461521681614c5d565b61522081866151fa565b9450600182165f811461523a576001811461525057615282565b60ff198316865281151560200286019350615282565b61525985614f64565b5f5b8381101561527a5781548189015260018201915060208101905061525b565b808801955050505b50505092915050565b5f615296838361520a565b905092915050565b5f600182019050919050565b5f6152b4826151ce565b6152be81856151d8565b9350836020820285016152d0856151e8565b805f5b8581101561530a578484038952816152eb858261528b565b94506152f68361529e565b925060208a019950506001810190506152d3565b50829750879550505050505092915050565b5f6060820190508181035f830152615335818789614cfd565b9050818103602083015261534981866152aa565b9050818103604083015261535e818486614cfd565b90509695505050505050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f61539e601583614408565b91506153a98261536a565b602082019050919050565b5f6020820190508181035f8301526153cb81615392565b9050919050565b5f82825260208201905092915050565b5f80fd5b82818337505050565b5f6153fa83856153d2565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561542d5761542c6153e2565b5b60208302925061543e8385846153e6565b82840190509392505050565b5f6020820190508181035f8301526154638184866153ef565b90509392505050565b5f67ffffffffffffffff821115615486576154856145dc565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b6154a88161475a565b81146154b2575f80fd5b50565b5f815190506154c38161549f565b92915050565b5f815190506154d78161417d565b92915050565b5f67ffffffffffffffff8211156154f7576154f66145dc565b5b602082029050602081019050919050565b5f61551a615515846154dd565b61463a565b9050808382526020820190506020840283018581111561553d5761553c6141af565b5b835b8181101561556657806155528882614eee565b84526020840193505060208101905061553f565b5050509392505050565b5f82601f830112615584576155836141a7565b5b8151615594848260208601615508565b91505092915050565b5f608082840312156155b2576155b1615497565b5b6155bc608061463a565b90505f6155cb848285016154b5565b5f8301525060206155de848285016154c9565b60208301525060406155f2848285016154b5565b604083015250606082015167ffffffffffffffff8111156156165761561561549b565b5b61562284828501615570565b60608301525092915050565b5f61564061563b8461546c565b61463a565b90508083825260208201905060208402830185811115615663576156626141af565b5b835b818110156156aa57805167ffffffffffffffff811115615688576156876141a7565b5b808601615695898261559d565b85526020850194505050602081019050615665565b5050509392505050565b5f82601f8301126156c8576156c76141a7565b5b81516156d884826020860161562e565b91505092915050565b5f602082840312156156f6576156f561416c565b5b5f82015167ffffffffffffffff81111561571357615712614170565b5b61571f848285016156b4565b91505092915050565b5f61573282614174565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361576457615763614c8d565b5b600182019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6157a18161475a565b82525050565b5f82825260208201905092915050565b5f6157c1826142f7565b6157cb81856157a7565b93506157d683614311565b805f5b838110156158065781516157ed888261435f565b97506157f883614376565b9250506001810190506157d9565b5085935050505092915050565b5f608083015f8301516158285f860182615798565b50602083015161583b602086018261480c565b50604083015161584e6040860182615798565b506060830151848203606086015261586682826157b7565b9150508091505092915050565b5f61587e8383615813565b905092915050565b5f602082019050919050565b5f61589c8261576f565b6158a68185615779565b9350836020820285016158b885615789565b805f5b858110156158f357848403895281516158d48582615873565b94506158df83615886565b925060208a019950506001810190506158bb565b50829750879550505050505092915050565b5f6040820190508181035f83015261591d8186615892565b90508181036020830152615932818486614cfd565b9050949350505050565b5f80fd5b5f80fd5b5f80fd5b5f80833560016020038436030381126159645761596361593c565b5b80840192508235915067ffffffffffffffff82111561598657615985615940565b5b6020830192506020820236038313156159a2576159a1615944565b5b509250929050565b5f60ff82169050919050565b5f6159d06159cb6159c6846159aa565b614fe2565b614174565b9050919050565b6159e0816159b6565b82525050565b5f6040820190506159f95f8301856159d7565b615a0660208301846147c5565b9392505050565b5f60408284031215615a2257615a21615497565b5b615a2c604061463a565b90505f615a3b84828501614193565b5f830152506020615a4e84828501614193565b60208301525092915050565b5f60408284031215615a6f57615a6e61416c565b5b5f615a7c84828501615a0d565b91505092915050565b5f819050919050565b5f615a9c60208401846145c4565b905092915050565b5f602082019050919050565b5f615abb8385614301565b9350615ac682615a85565b805f5b85811015615afe57615adb8284615a8e565b615ae5888261435f565b9750615af083615aa4565b925050600181019050615ac9565b5085925050509392505050565b5f604082019050615b1e5f8301866147d4565b8181036020830152615b31818486615ab0565b9050949350505050565b5f81519050919050565b5f819050602082019050919050565b5f615b5f8383615798565b60208301905092915050565b5f602082019050919050565b5f615b8182615b3b565b615b8b81856153d2565b9350615b9683615b45565b805f5b83811015615bc6578151615bad8882615b54565b9750615bb883615b6b565b925050600181019050615b99565b5085935050505092915050565b5f6020820190508181035f830152615beb8184615b77565b905092915050565b5f81519050919050565b615c0682615bf3565b67ffffffffffffffff811115615c1f57615c1e6145dc565b5b615c298254614c5d565b615c34828285615078565b5f60209050601f831160018114615c65575f8415615c53578287015190505b615c5d85826150e6565b865550615cc4565b601f198416615c7386614f64565b5f5b82811015615c9a57848901518255600182019150602085019450602081019050615c75565b86831015615cb75784890151615cb3601f8916826150ca565b8355505b6001600288020188555050505b505050505050565b5f6080820190508181035f830152615ce48189615892565b9050615cf360208301886147d4565b8181036040830152615d06818688614cfd565b90508181036060830152615d1b818486614cfd565b9050979650505050505050565b5f604082019050615d3b5f830185614763565b615d4860208301846147d4565b9392505050565b5f60208284031215615d6457615d6361416c565b5b5f615d71848285016145c4565b91505092915050565b5f81905092915050565b615d8d8161475a565b82525050565b5f615d9e8383615d84565b60208301905092915050565b5f615db482615b3b565b615dbe8185615d7a565b9350615dc983615b45565b805f5b83811015615df9578151615de08882615d93565b9750615deb83615b6b565b925050600181019050615dcc565b5085935050505092915050565b5f615e118284615daa565b915081905092915050565b5f81905092915050565b5f615e3082615bf3565b615e3a8185615e1c565b9350615e4a818560208601614418565b80840191505092915050565b5f615e618284615e26565b915081905092915050565b5f60a082019050615e7f5f830188614763565b615e8c6020830187614763565b615e996040830186614763565b615ea66060830185614763565b615eb36080830184614763565b9695505050505050565b5f604082019050615ed05f8301856147c5565b615edd60208301846147d4565b9392505050565b5f60208284031215615ef957615ef861416c565b5b5f615f06848285016154c9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f60208284031215615f5157615f5061416c565b5b5f615f5e848285016154b5565b91505092915050565b5f608082019050615f7a5f830187614763565b615f876020830186614763565b615f946040830185614763565b615fa16060830184614763565b95945050505050565b5f615fb482614174565b9150615fbf83614174565b9250828201905080821115615fd757615fd6614c8d565b5b92915050565b5f604082019050615ff05f8301856147c5565b615ffd60208301846147c5565b9392505050565b5f608083015f8301516160195f860182615798565b50602083015161602c602086018261480c565b50604083015161603f6040860182615798565b506060830151848203606086015261605782826157b7565b9150508091505092915050565b5f6040820190508181035f83015261607c8185616004565b905081810360208301526160908184616004565b90509392505050565b5f61ffff82169050919050565b5f6160c06160bb6160b684616099565b614fe2565b614174565b9050919050565b6160d0816160a6565b82525050565b5f6040820190506160e95f8301856160c7565b6160f660208301846147c5565b9392505050565b5f61610782614174565b915061611283614174565b925082820261612081614174565b9150828204841483151761613757616136614c8d565b5b5092915050565b604082015f8201516161525f85018261480c565b506020820151616165602085018261480c565b50505050565b5f60608201905061617e5f8301856147c5565b61618b602083018461613e565b9392505050565b5f6040820190506161a55f8301856147d4565b81810360208301526161b78184614382565b90509392505050565b5f6020820190508181035f8301526161d9818486614cfd565b90509392505050565b5f819050815f5260205f209050919050565b601f82111561623557616206816161e2565b61620f84614f76565b8101602085101561621e578190505b61623261622a85614f76565b830182615056565b50505b505050565b616243826143fe565b67ffffffffffffffff81111561625c5761625b6145dc565b5b6162668254614c5d565b6162718282856161f4565b5f60209050601f8311600181146162a2575f8415616290578287015190505b61629a85826150e6565b865550616301565b601f1984166162b0866161e2565b5f5b828110156162d7578489015182556001820191506020850194506020810190506162b2565b868310156162f457848901516162f0601f8916826150ca565b8355505b6001600288020188555050505b505050505050565b616312816159aa565b82525050565b5f60208201905061632b5f830184616309565b92915050565b6054811061634257616341614bea565b5b50565b5f81905061635282616331565b919050565b5f61636182616345565b9050919050565b61637181616357565b82525050565b5f60208201905061638a5f830184616368565b92915050565b5f81905092915050565b6163a38161433f565b82525050565b5f6163b4838361639a565b60208301905092915050565b5f6163ca826142f7565b6163d48185616390565b93506163df83614311565b805f5b8381101561640f5781516163f688826163a9565b975061640183614376565b9250506001810190506163e2565b5085935050505092915050565b5f61642782846163c0565b915081905092915050565b5f60c0820190506164455f830189614763565b6164526020830188614763565b61645f6040830187614763565b61646c60608301866147c5565b61647960808301856147c5565b61648660a0830184614763565b979650505050505050565b5f60a0820190506164a45f830188614763565b6164b16020830187614763565b6164be6040830186614763565b6164cb60608301856147c5565b6164d860808301846147d4565b9695505050505050565b5f6080820190506164f55f830187614763565b6165026020830186616309565b61650f6040830185614763565b61651c6060830184614763565b9594505050505056fe5573657244656372797074526573706f6e7365566572696669636174696f6e286279746573207075626c69634b65792c627974657333325b5d20637448616e646c65732c6279746573207573657244656372797074656453686172652c627974657320657874726144617461295075626c696344656372797074566572696669636174696f6e28627974657333325b5d20637448616e646c65732c627974657320646563727970746564526573756c742c62797465732065787472614461746129557365724465637279707452657175657374566572696669636174696f6e286279746573207075626c69634b65792c616464726573735b5d20636f6e74726163744164647265737365732c75696e7432353620737461727454696d657374616d702c75696e74323536206475726174696f6e446179732c62797465732065787472614461746129 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\xA0`@R0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RP4\x80\x15b\0\0CW_\x80\xFD[Pb\0\0Tb\0\0Z` \x1B` \x1CV[b\0\x01\xC4V[_b\0\0kb\0\x01^` \x1B` \x1CV[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15b\0\0\xB6W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14b\0\x01[Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Qb\0\x01R\x91\x90b\0\x01\xA9V[`@Q\x80\x91\x03\x90\xA1[PV[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[b\0\x01\xA3\x81b\0\x01\x85V[\x82RPPV[_` \x82\x01\x90Pb\0\x01\xBE_\x83\x01\x84b\0\x01\x98V[\x92\x91PPV[`\x80Qau\xFDb\0\x01\xEB_9_\x81\x81a,)\x01R\x81\x81a,~\x01Ra/ \x01Rau\xFD_\xF3\xFE`\x80`@R`\x046\x10a\x01\x13W_5`\xE0\x1C\x80c\\\x97Z\xBB\x11a\0\x9FW\x80c\xAD<\xB1\xCC\x11a\0cW\x80c\xAD<\xB1\xCC\x14a\x03OW\x80c\xB6\xE9\xA9\xB3\x14a\x03yW\x80c\xD8\x99\x8FE\x14a\x03\xB5W\x80c\xF1\xB5z\xDB\x14a\x03\xDDW\x80c\xFB\xB82Y\x14a\x04\x05Wa\x01\x13V[\x80c\\\x97Z\xBB\x14a\x02\x8FW\x80co\x89\x13\xBC\x14a\x02\xB9W\x80c\x84V\xCBY\x14a\x02\xE1W\x80c\x84\xB0\x19n\x14a\x02\xF7W\x80c\x9F\xADZ/\x14a\x03'Wa\x01\x13V[\x80c?K\xA8:\x11a\0\xE6W\x80c?K\xA8:\x14a\x01\xBBW\x80c@\x14\xC4\xCD\x14a\x01\xD1W\x80cO\x1E\xF2\x86\x14a\x02\rW\x80cR\xD1\x90-\x14a\x02)W\x80cX\xF5\xB8\xAB\x14a\x02SWa\x01\x13V[\x80c\x04o\x9E\xB3\x14a\x01\x17W\x80c\t\0\xCCi\x14a\x01?W\x80c\r\x8En,\x14a\x01{W\x80c9\xF78\x10\x14a\x01\xA5W[_\x80\xFD[4\x80\x15a\x01\"W_\x80\xFD[Pa\x01=`\x04\x806\x03\x81\x01\x90a\x018\x91\x90aM\x81V[a\x04AV[\0[4\x80\x15a\x01JW_\x80\xFD[Pa\x01e`\x04\x806\x03\x81\x01\x90a\x01`\x91\x90aNEV[a\x08\xCFV[`@Qa\x01r\x91\x90aOWV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x86W_\x80\xFD[Pa\x01\x8Fa\t\xA0V[`@Qa\x01\x9C\x91\x90aP\x01V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xB0W_\x80\xFD[Pa\x01\xB9a\n\x1BV[\0[4\x80\x15a\x01\xC6W_\x80\xFD[Pa\x01\xCFa\x0CSV[\0[4\x80\x15a\x01\xDCW_\x80\xFD[Pa\x01\xF7`\x04\x806\x03\x81\x01\x90a\x01\xF2\x91\x90aPvV[a\r\x9BV[`@Qa\x02\x04\x91\x90aQ\x0EV[`@Q\x80\x91\x03\x90\xF3[a\x02'`\x04\x806\x03\x81\x01\x90a\x02\"\x91\x90aRyV[a\x0F(V[\0[4\x80\x15a\x024W_\x80\xFD[Pa\x02=a\x0FGV[`@Qa\x02J\x91\x90aR\xEBV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02^W_\x80\xFD[Pa\x02y`\x04\x806\x03\x81\x01\x90a\x02t\x91\x90aNEV[a\x0FxV[`@Qa\x02\x86\x91\x90aQ\x0EV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\x9AW_\x80\xFD[Pa\x02\xA3a\x0F\xACV[`@Qa\x02\xB0\x91\x90aQ\x0EV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\xC4W_\x80\xFD[Pa\x02\xDF`\x04\x806\x03\x81\x01\x90a\x02\xDA\x91\x90aM\x81V[a\x0F\xCEV[\0[4\x80\x15a\x02\xECW_\x80\xFD[Pa\x02\xF5a\x13\xD7V[\0[4\x80\x15a\x03\x02W_\x80\xFD[Pa\x03\x0Ba\x14\xFCV[`@Qa\x03\x1E\x97\x96\x95\x94\x93\x92\x91\x90aT\x13V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x032W_\x80\xFD[Pa\x03M`\x04\x806\x03\x81\x01\x90a\x03H\x91\x90aUHV[a\x16\x05V[\0[4\x80\x15a\x03ZW_\x80\xFD[Pa\x03ca\x1BWV[`@Qa\x03p\x91\x90aP\x01V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\x84W_\x80\xFD[Pa\x03\x9F`\x04\x806\x03\x81\x01\x90a\x03\x9A\x91\x90aV\xD8V[a\x1B\x90V[`@Qa\x03\xAC\x91\x90aQ\x0EV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\xC0W_\x80\xFD[Pa\x03\xDB`\x04\x806\x03\x81\x01\x90a\x03\xD6\x91\x90aPvV[a\x1E\xAEV[\0[4\x80\x15a\x03\xE8W_\x80\xFD[Pa\x04\x03`\x04\x806\x03\x81\x01\x90a\x03\xFE\x91\x90aW\xAFV[a lV[\0[4\x80\x15a\x04\x10W_\x80\xFD[Pa\x04+`\x04\x806\x03\x81\x01\x90a\x04&\x91\x90aX\xE9V[a%\x1DV[`@Qa\x048\x91\x90aQ\x0EV[`@Q\x80\x91\x03\x90\xF3[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x04\x8E\x91\x90aYzV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04\xA9W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xCD\x91\x90aY\xBDV[a\x05\x0EW3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x05\x05\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[_a\x05\x17a'\x8CV[\x90P`\xF8`\x02`\x05\x81\x11\x15a\x05/Wa\x05.aY\xE8V[[\x90\x1B\x88\x11\x15\x80a\x05BWP\x80`\t\x01T\x88\x11[\x15a\x05\x84W\x87`@Q\x7F\xD4\x8A\xF9B\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\x81R`\x04\x01a\x05{\x91\x90aZ\x15V[`@Q\x80\x91\x03\x90\xFD[_\x81`\x08\x01_\x8A\x81R` \x01\x90\x81R` \x01_ `@Q\x80`@\x01`@R\x90\x81_\x82\x01\x80Ta\x05\xB2\x90aZ[V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x05\xDE\x90aZ[V[\x80\x15a\x06)W\x80`\x1F\x10a\x06\0Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x06)V[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x06\x0CW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81R` \x01`\x01\x82\x01\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x06\x7FW` \x02\x82\x01\x91\x90_R` _ \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x06kW[PPPPP\x81RPP\x90P_`@Q\x80`\x80\x01`@R\x80\x83_\x01Q\x81R` \x01\x83` \x01Q\x81R` \x01\x8A\x8A\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90P_a\x07E\x82a'\xB3V[\x90Pa\x07S\x8B\x82\x8A\x8Aa(zV[_\x84`\x03\x01_\x8D\x81R` \x01\x90\x81R` \x01_ _\x80_\x1B\x81R` \x01\x90\x81R` \x01_ \x90P\x803\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x8B\x7F\x7F\xCD\xFBS\x81\x91\x7FUJq}\nTp\xA3?ZI\xBAdE\xF0^\xC4=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0C\xD4\x91\x90a]\0V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15\x80\x15a\rOWPs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\r\x91W3`@Q\x7F\xE1\x91f\xEE\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\x81R`\x04\x01a\r\x88\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[a\r\x99a+\xB9V[V[_\x80_\x90P[\x85\x85\x90P\x81\x10\x15a\x0F\x1AWs\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x06 2m\x87\x87\x84\x81\x81\x10a\r\xEFWa\r\xEEa]+V[[\x90P` \x02\x015`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\x12\x91\x90aR\xEBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E-W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0EQ\x91\x90aY\xBDV[\x15\x80a\x0E\xFFWPs\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xDC\x9Ao\x87\x87\x84\x81\x81\x10a\x0E\x9BWa\x0E\x9Aa]+V[[\x90P` \x02\x015`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\xBE\x91\x90aR\xEBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E\xD9W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0E\xFD\x91\x90aY\xBDV[\x15[\x15a\x0F\rW_\x91PPa\x0F V[\x80\x80`\x01\x01\x91PPa\r\xA1V[P`\x01\x90P[\x94\x93PPPPV[a\x0F0a,'V[a\x0F9\x82a-\rV[a\x0FC\x82\x82a.\0V[PPV[_a\x0FPa/\x1EV[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[_\x80a\x0F\x82a'\x8CV[\x90P\x80`\x01\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[_\x80a\x0F\xB6a/\xA5V[\x90P\x80_\x01_\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x90V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x10\x1B\x91\x90aYzV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x106W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10Z\x91\x90aY\xBDV[a\x10\x9BW3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x10\x92\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[_a\x10\xA4a'\x8CV[\x90P`\xF8`\x01`\x05\x81\x11\x15a\x10\xBCWa\x10\xBBaY\xE8V[[\x90\x1B\x88\x11\x15\x80a\x10\xCFWP\x80`\x07\x01T\x88\x11[\x15a\x11\x11W\x87`@Q\x7F\xD4\x8A\xF9B\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\x81R`\x04\x01a\x11\x08\x91\x90aZ\x15V[`@Q\x80\x91\x03\x90\xFD[_`@Q\x80``\x01`@R\x80\x83`\x06\x01_\x8C\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x11xW` \x02\x82\x01\x91\x90_R` _ \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x11dW[PPPPP\x81R` \x01\x89\x89\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x85\x85\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90P_a\x12\x1E\x82a/\xCCV[\x90Pa\x12,\x8A\x82\x89\x89a(zV[_\x83`\x05\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _\x83\x81R` \x01\x90\x81R` \x01_ \x90P\x80\x88\x88\x90\x91\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x92\x90\x91\x92\x90\x91\x92\x90\x91\x92P\x91\x82a\x12\x8A\x92\x91\x90a^\xFFV[P\x83`\x03\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _\x83\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x83`\x01\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x13AWPa\x13@\x81\x80T\x90Pa0\x86V[[\x15a\x13\xCAW`\x01\x84`\x01\x01_\x8D\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x81\x84`\x04\x01_\x8D\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x8A\x7F\xD7\xE5\x8A6z\nl)\x8Ev\xAD]$\0\x04\xE3'\xAA\x14#\xCB\xE4\xBD\x7F\xF8]Lq^\xF8\xD1_\x8B\x8B\x84\x8A\x8A`@Qa\x13\xC1\x95\x94\x93\x92\x91\x90aa\x1AV[`@Q\x80\x91\x03\x90\xA2[PPPPPPPPPPPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cF\xFB\xF6\x8E3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x14$\x91\x90aYzV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x14?W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x14c\x91\x90aY\xBDV[\x15\x80\x15a\x14\xB0WPs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x14\xF2W3`@Q\x7F8\x89\x16\xBB\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\x81R`\x04\x01a\x14\xE9\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[a\x14\xFAa1\x17V[V[_``\x80_\x80_``_a\x15\x0Ea1\x86V[\x90P_\x80\x1B\x81_\x01T\x14\x80\x15a\x15)WP_\x80\x1B\x81`\x01\x01T\x14[a\x15hW`@Q\x7F\x08\xC3y\xA0\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\x81R`\x04\x01a\x15_\x90aa\xB2V[`@Q\x80\x91\x03\x90\xFD[a\x15pa1\xADV[a\x15xa2KV[F0_\x80\x1B_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x15\x97Wa\x15\x96aQUV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x15\xC5W\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x7F\x0F\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\x95\x94\x93\x92\x91\x90\x97P\x97P\x97P\x97P\x97P\x97P\x97PP\x90\x91\x92\x93\x94\x95\x96V[a\x16\ra2\xE9V[_\x87\x80` \x01\x90a\x16\x1E\x91\x90aa\xDCV[\x90P\x03a\x16WW`@Q\x7FW\xCF\xA2\x17\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\n`\xFF\x16\x87\x80` \x01\x90a\x16l\x91\x90aa\xDCV[\x90P\x11\x15a\x16\xC5W`\n\x87\x80` \x01\x90a\x16\x86\x91\x90aa\xDCV[\x90P`@Q\x7F\xAF\x1F\x04\x95\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\x81R`\x04\x01a\x16\xBC\x92\x91\x90abzV[`@Q\x80\x91\x03\x90\xFD[a\x16\xDE\x89\x806\x03\x81\x01\x90a\x16\xD9\x91\x90ab\xF6V[a3*V[a\x17G\x87\x80` \x01\x90a\x16\xF1\x91\x90aa\xDCV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x89_\x01` \x81\x01\x90a\x17B\x91\x90ac!V[a4uV[\x15a\x17\xACW\x87_\x01` \x81\x01\x90a\x17^\x91\x90ac!V[\x87\x80` \x01\x90a\x17n\x91\x90aa\xDCV[`@Q\x7F\xC3Dj\xC7\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\x81R`\x04\x01a\x17\xA3\x93\x92\x91\x90ac\xD2V[`@Q\x80\x91\x03\x90\xFD[_a\x18\x18\x8C\x8C\x8A\x80` \x01\x90a\x17\xC2\x91\x90aa\xDCV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x8C_\x01` \x81\x01\x90a\x18\x13\x91\x90ac!V[a4\xF3V[\x90Pa\x187\x88_\x015\x8A\x8A\x80` \x01\x90a\x182\x91\x90aa\xDCV[a6\xE6V[_`@Q\x80`\xC0\x01`@R\x80\x89\x89\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x8A\x80` \x01\x90a\x18\x9C\x91\x90aa\xDCV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x8B_\x01` \x81\x01\x90a\x18\xF2\x91\x90ac!V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x8C_\x015\x81R` \x01\x8C` \x015\x81R` \x01\x85\x85\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90Pa\x19\x8B\x81\x8B` \x01` \x81\x01\x90a\x19\x80\x91\x90ac!V[\x88\x88\x8D_\x015a7\xC5V[_s\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xA1O\x89q\x84`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x19\xD9\x91\x90ad\xB9V[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x19\xF3W=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1A\x1B\x91\x90agFV[\x90Pa\x1A&\x81a8\x9DV[_a\x1A/a'\x8CV[\x90P\x80`\t\x01_\x81T\x80\x92\x91\x90a\x1AE\x90ag\x8DV[\x91\x90PUP_\x81`\t\x01T\x90P`@Q\x80`@\x01`@R\x80\x8C\x8C\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x86\x81RP\x82`\x08\x01_\x83\x81R` \x01\x90\x81R` \x01_ _\x82\x01Q\x81_\x01\x90\x81a\x1A\xD0\x91\x90ag\xDEV[P` \x82\x01Q\x81`\x01\x01\x90\x80Q\x90` \x01\x90a\x1A\xED\x92\x91\x90aL+V[P\x90PP\x80\x7F\xF9\x01\x1B\xD6\xBA\r\xA6\x04\x9CR\rp\xFEYq\xF1~\xD7\xAByT\x86\x05%D\xB5\x10\x19\x89lYk\x84\x8F` \x01` \x81\x01\x90a\x1B'\x91\x90ac!V[\x8E\x8E\x8C\x8C`@Qa\x1B=\x96\x95\x94\x93\x92\x91\x90aj4V[`@Q\x80\x91\x03\x90\xA2PPPPPPPPPPPPPPPPV[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[_s\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c+\x13Y\x1C\x8A\x8A\x88\x88`@Q\x85c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1B\xE4\x94\x93\x92\x91\x90aj\xCDV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1B\xFFW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1C#\x91\x90aY\xBDV[a\x1C/W_\x90Pa\x1E\xA2V[_[\x87\x87\x90P\x81\x10\x15a\x1E\x9CWs\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC6R\x8Fi\x89\x89\x84\x81\x81\x10a\x1C\x7FWa\x1C~a]+V[[\x90P`@\x02\x01_\x015\x8B_\x01` \x81\x01\x90a\x1C\x9A\x91\x90ac!V[`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1C\xB7\x92\x91\x90ak\x0BV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1C\xD2W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1C\xF6\x91\x90aY\xBDV[\x15\x80a\x1D\xD2WPs\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC6R\x8Fi\x89\x89\x84\x81\x81\x10a\x1D@Wa\x1D?a]+V[[\x90P`@\x02\x01_\x015\x8A\x8A\x85\x81\x81\x10a\x1D\\Wa\x1D[a]+V[[\x90P`@\x02\x01` \x01` \x81\x01\x90a\x1Dt\x91\x90ac!V[`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\x91\x92\x91\x90ak\x0BV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1D\xACW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1D\xD0\x91\x90aY\xBDV[\x15[\x80a\x1E\x81WPs\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xDC\x9Ao\x89\x89\x84\x81\x81\x10a\x1E\x1BWa\x1E\x1Aa]+V[[\x90P`@\x02\x01_\x015`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E@\x91\x90aR\xEBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1E[W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1E\x7F\x91\x90aY\xBDV[\x15[\x15a\x1E\x8FW_\x91PPa\x1E\xA2V[\x80\x80`\x01\x01\x91PPa\x1C1V[P`\x01\x90P[\x98\x97PPPPPPPPV[a\x1E\xB6a2\xE9V[_\x84\x84\x90P\x03a\x1E\xF2W`@Q\x7F-\xE7T8\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x1F;\x84\x84\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa9\x83V[_s\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xA1O\x89q\x86\x86`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x8B\x92\x91\x90ak\x9AV[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1F\xA5W=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1F\xCD\x91\x90agFV[\x90Pa\x1F\xD8\x81a8\x9DV[_a\x1F\xE1a'\x8CV[\x90P\x80`\x07\x01_\x81T\x80\x92\x91\x90a\x1F\xF7\x90ag\x8DV[\x91\x90PUP_\x81`\x07\x01T\x90P\x86\x86\x83`\x06\x01_\x84\x81R` \x01\x90\x81R` \x01_ \x91\x90a &\x92\x91\x90aLvV[P\x80\x7F\"\xDBH\n9\xBDrUd8\xAA\xDBJ2\xA3\xD2\xA6c\x8B\x87\xC0;\xBE\xC5\xFE\xF6\x99~\x10\x95\x87\xFF\x84\x87\x87`@Qa [\x93\x92\x91\x90ak\xBCV[`@Q\x80\x91\x03\x90\xA2PPPPPPPV[a ta2\xE9V[_\x88\x80` \x01\x90a \x85\x91\x90aa\xDCV[\x90P\x03a \xBEW`@Q\x7FW\xCF\xA2\x17\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\n`\xFF\x16\x88\x80` \x01\x90a \xD3\x91\x90aa\xDCV[\x90P\x11\x15a!,W`\n\x88\x80` \x01\x90a \xED\x91\x90aa\xDCV[\x90P`@Q\x7F\xAF\x1F\x04\x95\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\x81R`\x04\x01a!#\x92\x91\x90abzV[`@Q\x80\x91\x03\x90\xFD[a!E\x89\x806\x03\x81\x01\x90a!@\x91\x90ab\xF6V[a3*V[a!\x9D\x88\x80` \x01\x90a!X\x91\x90aa\xDCV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x88a4uV[\x15a!\xF1W\x86\x88\x80` \x01\x90a!\xB3\x91\x90aa\xDCV[`@Q\x7F\xDCMx\xB1\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\x81R`\x04\x01a!\xE8\x93\x92\x91\x90ac\xD2V[`@Q\x80\x91\x03\x90\xFD[_a\"L\x8C\x8C\x8B\x80` \x01\x90a\"\x07\x91\x90aa\xDCV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x8Ba4\xF3V[\x90P_`@Q\x80`\xA0\x01`@R\x80\x89\x89\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x8B\x80` \x01\x90a\"\xB3\x91\x90aa\xDCV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x8C_\x015\x81R` \x01\x8C` \x015\x81R` \x01\x85\x85\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90Pa#c\x81\x8A\x88\x88\x8E_\x015a:;V[_s\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xA1O\x89q\x84`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a#\xB1\x91\x90ad\xB9V[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a#\xCBW=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a#\xF3\x91\x90agFV[\x90Pa#\xFE\x81a8\x9DV[_a$\x07a'\x8CV[\x90P\x80`\t\x01_\x81T\x80\x92\x91\x90a$\x1D\x90ag\x8DV[\x91\x90PUP_\x81`\t\x01T\x90P`@Q\x80`@\x01`@R\x80\x8C\x8C\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x86\x81RP\x82`\x08\x01_\x83\x81R` \x01\x90\x81R` \x01_ _\x82\x01Q\x81_\x01\x90\x81a$\xA8\x91\x90ag\xDEV[P` \x82\x01Q\x81`\x01\x01\x90\x80Q\x90` \x01\x90a$\xC5\x92\x91\x90aL+V[P\x90PP\x80\x7F\xF9\x01\x1B\xD6\xBA\r\xA6\x04\x9CR\rp\xFEYq\xF1~\xD7\xAByT\x86\x05%D\xB5\x10\x19\x89lYk\x84\x8E\x8E\x8E\x8C\x8C`@Qa%\x03\x96\x95\x94\x93\x92\x91\x90aj4V[`@Q\x80\x91\x03\x90\xA2PPPPPPPPPPPPPPPPV[_\x80_\x90P[\x85\x85\x90P\x81\x10\x15a'}Ws\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC6R\x8Fi\x87\x87\x84\x81\x81\x10a%qWa%pa]+V[[\x90P`@\x02\x01_\x015\x89`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a%\x98\x92\x91\x90ak\x0BV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a%\xB3W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a%\xD7\x91\x90aY\xBDV[\x15\x80a&\xB3WPs\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC6R\x8Fi\x87\x87\x84\x81\x81\x10a&!Wa& a]+V[[\x90P`@\x02\x01_\x015\x88\x88\x85\x81\x81\x10a&=Wa&=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a&\xB1\x91\x90aY\xBDV[\x15[\x80a'bWPs\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xDC\x9Ao\x87\x87\x84\x81\x81\x10a&\xFCWa&\xFBa]+V[[\x90P`@\x02\x01_\x015`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a'!\x91\x90aR\xEBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a'=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a'`\x91\x90aY\xBDV[\x15[\x15a'pW_\x91PPa'\x83V[\x80\x80`\x01\x01\x91PPa%#V[P`\x01\x90P[\x95\x94PPPPPV[_\x7Fh\x11>h\xAFILn\xFD\x02\x10\xFCK\xF9\xBAt\x8D\x1F\xFA\xDA\xA4q\x82\x17\xFD\xF65H\xC4\xAE\xE7\0\x90P\x90V[_a(s`@Q\x80`\xA0\x01`@R\x80`m\x81R` \x01at\x0C`m\x919\x80Q\x90` \x01 \x83_\x01Q\x80Q\x90` \x01 \x84` \x01Q`@Q` \x01a'\xF7\x91\x90al\x7FV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x85`@\x01Q\x80Q\x90` \x01 \x86``\x01Q`@Q` \x01a(.\x91\x90al\xCFV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a(X\x95\x94\x93\x92\x91\x90al\xE5V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a;\x13V[\x90P\x91\x90PV[_a(\x83a'\x8CV[\x90P_a(\xD3\x85\x85\x85\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa;,V[\x90Pa(\xDE\x81a;VV[\x81`\x02\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a)}W\x85\x81`@Q\x7F\x99\xECH\xD9\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\x81R`\x04\x01a)t\x92\x91\x90am6V[`@Q\x80\x91\x03\x90\xFD[`\x01\x82`\x02\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPPPPPPPV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC2\xB4)\x86`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a*JW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a*n\x91\x90am]V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[``_`\x01a*\x8A\x84a<&V[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a*\xA8Wa*\xA7aQUV[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a*\xDAW\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a+;W\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a+0Wa+/am\x88V[[\x04\x94P_\x85\x03a*\xE7W[\x81\x93PPPP\x91\x90PV[_a+Oa+jV[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[a+\x99a=wV[a+\xA3\x82\x82a=\xB7V[PPV[a+\xAFa=wV[a+\xB7a>\x08V[V[a+\xC1a>8V[_a+\xCAa/\xA5V[\x90P_\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F]\xB9\xEE\nI[\xF2\xE6\xFF\x9C\x91\xA7\x83L\x1B\xA4\xFD\xD2D\xA5\xE8\xAANS{\xD3\x8A\xEA\xE4\xB0s\xAAa,\x0Fa>xV[`@Qa,\x1C\x91\x90aYzV[`@Q\x80\x91\x03\x90\xA1PV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a,\xD4WP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a,\xBBa>\x7FV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a-\x0BW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a-jW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a-\x8E\x91\x90a]\0V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a-\xFDW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a-\xF4\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a.hWP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a.e\x91\x90am\xB5V[`\x01[a.\xA9W\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a.\xA0\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a/\x0FW\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a/\x06\x91\x90aR\xEBV[`@Q\x80\x91\x03\x90\xFD[a/\x19\x83\x83a>\xD2V[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a/\xA3W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x7F\xCD^\xD1\\n\x18~w\xE9\xAE\xE8\x81\x84\xC2\x1FO!\x82\xABX'\xCB;~\x07\xFB\xED\xCDc\xF03\0\x90P\x90V[_a0\x7F`@Q\x80`\x80\x01`@R\x80`T\x81R` \x01aty`T\x919\x80Q\x90` \x01 \x83_\x01Q`@Q` \x01a0\x04\x91\x90al\x7FV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x84` \x01Q\x80Q\x90` \x01 \x85`@\x01Q`@Q` \x01a0;\x91\x90al\xCFV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a0d\x94\x93\x92\x91\x90am\xE0V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a;\x13V[\x90P\x91\x90PV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c*8\x89\x98`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a0\xE5W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a1\t\x91\x90am]V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[a1\x1Fa2\xE9V[_a1(a/\xA5V[\x90P`\x01\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7Fb\xE7\x8C\xEA\x01\xBE\xE3 \xCDNB\x02p\xB5\xEAt\0\r\x11\xB0\xC9\xF7GT\xEB\xDB\xFCTK\x05\xA2Xa1na>xV[`@Qa1{\x91\x90aYzV[`@Q\x80\x91\x03\x90\xA1PV[_\x7F\xA1jF\xD9Ba\xC7Q|\xC8\xFF\x89\xF6\x1C\x0C\xE95\x98\xE3\xC8I\x80\x10\x11\xDE\xE6I\xA6\xA5W\xD1\0\x90P\x90V[``_a1\xB8a1\x86V[\x90P\x80`\x02\x01\x80Ta1\xC9\x90aZ[V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta1\xF5\x90aZ[V[\x80\x15a2@W\x80`\x1F\x10a2\x17Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a2@V[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a2#W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[``_a2Va1\x86V[\x90P\x80`\x03\x01\x80Ta2g\x90aZ[V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta2\x93\x90aZ[V[\x80\x15a2\xDEW\x80`\x1F\x10a2\xB5Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a2\xDEV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a2\xC1W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[a2\xF1a\x0F\xACV[\x15a3(W`@Q\x7F\xD9<\x06e\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x81` \x01Q\x03a3gW`@Q\x7F\xDE(Y\xC1\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x01ma\xFF\xFF\x16\x81` \x01Q\x11\x15a3\xBEWa\x01m\x81` \x01Q`@Q\x7F2\x95\x18c\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\x81R`\x04\x01a3\xB5\x92\x91\x90an`V[`@Q\x80\x91\x03\x90\xFD[B\x81_\x01Q\x11\x15a4\x0BWB\x81_\x01Q`@Q\x7F\xF2L\x08\x87\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\x81R`\x04\x01a4\x02\x92\x91\x90an\x87V[`@Q\x80\x91\x03\x90\xFD[Bb\x01Q\x80\x82` \x01Qa4\x1F\x91\x90an\xAEV[\x82_\x01Qa4-\x91\x90an\xEFV[\x10\x15a4rWB\x81`@Q\x7F04\x80@\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\x81R`\x04\x01a4i\x92\x91\x90aoOV[`@Q\x80\x91\x03\x90\xFD[PV[_\x80_\x90P[\x83Q\x81\x10\x15a4\xE8W\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84\x82\x81Q\x81\x10a4\xAEWa4\xADa]+V[[` \x02` \x01\x01Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x03a4\xDBW`\x01\x91PPa4\xEDV[\x80\x80`\x01\x01\x91PPa4{V[P_\x90P[\x92\x91PPV[``_\x85\x85\x90P\x03a51W`@Q\x7F\xA6\xA6\xCB!\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84\x84\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a5NWa5MaQUV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a5|W\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x80[\x86\x86\x90P\x81\x10\x15a6\x91W_\x87\x87\x83\x81\x81\x10a5\xA1Wa5\xA0a]+V[[\x90P`@\x02\x01_\x015\x90P_\x88\x88\x84\x81\x81\x10a5\xC0Wa5\xBFa]+V[[\x90P`@\x02\x01` \x01` \x81\x01\x90a5\xD8\x91\x90ac!V[\x90P_a5\xE4\x83a?DV[\x90Pa5\xEF\x81a?\xCEV[a\xFF\xFF\x16\x85a5\xFE\x91\x90an\xEFV[\x94Pa6\n\x83\x88aA\xB9V[a6\x14\x83\x83aA\xB9V[a6\x1E\x88\x83a4uV[a6aW\x81\x88`@Q\x7F\xA4\xC3\x03\x91\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\x81R`\x04\x01a6X\x92\x91\x90aovV[`@Q\x80\x91\x03\x90\xFD[\x82\x86\x85\x81Q\x81\x10a6uWa6ta]+V[[` \x02` \x01\x01\x81\x81RPPPPP\x80\x80`\x01\x01\x91PPa5\x82V[Pa\x08\0\x81\x11\x15a6\xDDWa\x08\0\x81`@Q\x7F\xE7\xF4\x89]\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\x81R`\x04\x01a6\xD4\x92\x91\x90an\x87V[`@Q\x80\x91\x03\x90\xFD[P\x94\x93PPPPV[s\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c+\x13Y\x1C\x85\x85\x85\x85`@Q\x85c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a79\x94\x93\x92\x91\x90aj\xCDV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a7TW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a7x\x91\x90aY\xBDV[a7\xBFW\x83\x83\x83\x83`@Q\x7F\x08\n\x11?\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\x81R`\x04\x01a7\xB6\x94\x93\x92\x91\x90aj\xCDV[`@Q\x80\x91\x03\x90\xFD[PPPPV[_a7\xD0\x86\x83aB\x8EV[\x90P_a8 \x82\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa;,V[\x90P\x85s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a8\x94W\x84\x84`@Q\x7F*\x87='\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\x81R`\x04\x01a8\x8B\x92\x91\x90ao\xA4V[`@Q\x80\x91\x03\x90\xFD[PPPPPPPV[`\x01\x81Q\x11\x15a9\x80W_\x81_\x81Q\x81\x10a8\xBBWa8\xBAa]+V[[` \x02` \x01\x01Q` \x01Q\x90P_`\x01\x90P[\x82Q\x81\x10\x15a9}W\x81\x83\x82\x81Q\x81\x10a8\xECWa8\xEBa]+V[[` \x02` \x01\x01Q` \x01Q\x14a9pW\x82_\x81Q\x81\x10a9\x10Wa9\x0Fa]+V[[` \x02` \x01\x01Q\x83\x82\x81Q\x81\x10a9+Wa9*a]+V[[` \x02` \x01\x01Q`@Q\x7F\xCF\xAE\x92\x1F\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\x81R`\x04\x01a9g\x92\x91\x90ap&V[`@Q\x80\x91\x03\x90\xFD[\x80\x80`\x01\x01\x91PPa8\xCFV[PP[PV[_\x80[\x82Q\x81\x10\x15a9\xEBW_\x83\x82\x81Q\x81\x10a9\xA3Wa9\xA2a]+V[[` \x02` \x01\x01Q\x90P_a9\xB7\x82a?DV[\x90Pa9\xC2\x81a?\xCEV[a\xFF\xFF\x16\x84a9\xD1\x91\x90an\xEFV[\x93Pa9\xDC\x82aCaV[PP\x80\x80`\x01\x01\x91PPa9\x86V[Pa\x08\0\x81\x11\x15a:7Wa\x08\0\x81`@Q\x7F\xE7\xF4\x89]\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\x81R`\x04\x01a:.\x92\x91\x90an\x87V[`@Q\x80\x91\x03\x90\xFD[PPV[_a:F\x86\x83aD1V[\x90P_a:\x96\x82\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa;,V[\x90P\x85s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a;\nW\x84\x84`@Q\x7F*\x87='\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\x81R`\x04\x01a;\x01\x92\x91\x90ao\xA4V[`@Q\x80\x91\x03\x90\xFD[PPPPPPPV[_a;%a;\x1FaD\xFEV[\x83aE\x0CV[\x90P\x91\x90PV[_\x80_\x80a;:\x86\x86aELV[\x92P\x92P\x92Pa;J\x82\x82aE\xA1V[\x82\x93PPPP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c =\x01\x14\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a;\xA3\x91\x90aYzV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a;\xBEW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a;\xE2\x91\x90aY\xBDV[a<#W\x80`@Q\x7F*|n\xF6\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\x81R`\x04\x01a<\x1A\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[PV[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a<\x82Wz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a\x10a=wV[_a>\x19a/\xA5V[\x90P_\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPPV[a>@a\x0F\xACV[a>vW`@Q\x7F\x8D\xFC +\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_3\x90P\x90V[_a>\xAB\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1BaG!V[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a>\xDB\x82aG*V[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a?7Wa?1\x82\x82aG\xF3V[Pa?@V[a??aHsV[[PPV[_\x80`\xF8`\xF0\x84\x90\x1B\x90\x1C_\x1C\x90P`S\x80\x81\x11\x15a?fWa?eaY\xE8V[[`\xFF\x16\x81`\xFF\x16\x11\x15a?\xB0W\x80`@Q\x7Fd\x19P\xD7\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\x81R`\x04\x01a?\xA7\x91\x90aq\x91V[`@Q\x80\x91\x03\x90\xFD[\x80`\xFF\x16`S\x81\x11\x15a?\xC6Wa?\xC5aY\xE8V[[\x91PP\x91\x90PV[_\x80`S\x81\x11\x15a?\xE2Wa?\xE1aY\xE8V[[\x82`S\x81\x11\x15a?\xF5Wa?\xF4aY\xE8V[[\x03a@\x03W`\x02\x90PaA\xB4V[`\x02`S\x81\x11\x15a@\x17Wa@\x16aY\xE8V[[\x82`S\x81\x11\x15a@*Wa@)aY\xE8V[[\x03a@8W`\x08\x90PaA\xB4V[`\x03`S\x81\x11\x15a@LWa@KaY\xE8V[[\x82`S\x81\x11\x15a@_Wa@^aY\xE8V[[\x03a@mW`\x10\x90PaA\xB4V[`\x04`S\x81\x11\x15a@\x81Wa@\x80aY\xE8V[[\x82`S\x81\x11\x15a@\x94Wa@\x93aY\xE8V[[\x03a@\xA2W` \x90PaA\xB4V[`\x05`S\x81\x11\x15a@\xB6Wa@\xB5aY\xE8V[[\x82`S\x81\x11\x15a@\xC9Wa@\xC8aY\xE8V[[\x03a@\xD7W`@\x90PaA\xB4V[`\x06`S\x81\x11\x15a@\xEBWa@\xEAaY\xE8V[[\x82`S\x81\x11\x15a@\xFEWa@\xFDaY\xE8V[[\x03aA\x0CW`\x80\x90PaA\xB4V[`\x07`S\x81\x11\x15aA WaA\x1FaY\xE8V[[\x82`S\x81\x11\x15aA3WaA2aY\xE8V[[\x03aAAW`\xA0\x90PaA\xB4V[`\x08`S\x81\x11\x15aAUWaATaY\xE8V[[\x82`S\x81\x11\x15aAhWaAgaY\xE8V[[\x03aAwWa\x01\0\x90PaA\xB4V[\x81`@Q\x7F\xBEx0\xB1\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\x81R`\x04\x01aA\xAB\x91\x90aq\xF0V[`@Q\x80\x91\x03\x90\xFD[\x91\x90PV[s\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC6R\x8Fi\x83\x83`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01aB\x08\x92\x91\x90ak\x0BV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15aB#W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90aBG\x91\x90aY\xBDV[aB\x8AW\x81\x81`@Q\x7F\x16\n+K\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\x81R`\x04\x01aB\x81\x92\x91\x90ak\x0BV[`@Q\x80\x91\x03\x90\xFD[PPV[_\x80`@Q\x80`\xE0\x01`@R\x80`\xA9\x81R` \x01auT`\xA9\x919\x80Q\x90` \x01 \x84_\x01Q\x80Q\x90` \x01 \x85` \x01Q`@Q` \x01aB\xD0\x91\x90ar\x95V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x86`@\x01Q\x87``\x01Q\x88`\x80\x01Q\x89`\xA0\x01Q`@Q` \x01aC\n\x91\x90al\xCFV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01aC6\x97\x96\x95\x94\x93\x92\x91\x90ar\xABV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90PaCX\x83\x82aH\xAFV[\x91PP\x92\x91PPV[s\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x06 2m\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01aC\xAE\x91\x90aR\xEBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15aC\xC9W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90aC\xED\x91\x90aY\xBDV[aD.W\x80`@Q\x7FC1\xA8]\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\x81R`\x04\x01aD%\x91\x90aR\xEBV[`@Q\x80\x91\x03\x90\xFD[PV[_\x80`@Q\x80`\xC0\x01`@R\x80`\x87\x81R` \x01at\xCD`\x87\x919\x80Q\x90` \x01 \x84_\x01Q\x80Q\x90` \x01 \x85` \x01Q`@Q` \x01aDs\x91\x90ar\x95V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x86`@\x01Q\x87``\x01Q\x88`\x80\x01Q`@Q` \x01aD\xA8\x91\x90al\xCFV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01aD\xD3\x96\x95\x94\x93\x92\x91\x90as\x18V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90PaD\xF5\x83\x82aH\xAFV[\x91PP\x92\x91PPV[_aE\x07aI#V[\x90P\x90V[_`@Q\x7F\x19\x01\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\x81R\x83`\x02\x82\x01R\x82`\"\x82\x01R`B\x81 \x91PP\x92\x91PPV[_\x80_`A\x84Q\x03aE\x8CW_\x80_` \x87\x01Q\x92P`@\x87\x01Q\x91P``\x87\x01Q_\x1A\x90PaE~\x88\x82\x85\x85aI\x86V[\x95P\x95P\x95PPPPaE\x9AV[_`\x02\x85Q_\x1B\x92P\x92P\x92P[\x92P\x92P\x92V[_`\x03\x81\x11\x15aE\xB4WaE\xB3aY\xE8V[[\x82`\x03\x81\x11\x15aE\xC7WaE\xC6aY\xE8V[[\x03\x15aF\xFFW`\x01`\x03\x81\x11\x15aE\xE1WaE\xE0aY\xE8V[[\x82`\x03\x81\x11\x15aE\xF4WaE\xF3aY\xE8V[[\x03aF+W`@Q\x7F\xF6E\xEE\xDF\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02`\x03\x81\x11\x15aF?WaF>aY\xE8V[[\x82`\x03\x81\x11\x15aFRWaFQaY\xE8V[[\x03aF\x96W\x80_\x1C`@Q\x7F\xFC\xE6\x98\xF7\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\x81R`\x04\x01aF\x8D\x91\x90aZ\x15V[`@Q\x80\x91\x03\x90\xFD[`\x03\x80\x81\x11\x15aF\xA9WaF\xA8aY\xE8V[[\x82`\x03\x81\x11\x15aF\xBCWaF\xBBaY\xE8V[[\x03aF\xFEW\x80`@Q\x7F\xD7\x8B\xCE\x0C\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\x81R`\x04\x01aF\xF5\x91\x90aR\xEBV[`@Q\x80\x91\x03\x90\xFD[[PPV[_aG\x0Ca+jV[_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x90P\x90V[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03aG\x85W\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01aG|\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[\x80aG\xB1\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1BaG!V[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@QaH\x1C\x91\x90al\xCFV[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14aHTW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>aHYV[``\x91P[P\x91P\x91PaHi\x85\x83\x83aJmV[\x92PPP\x92\x91PPV[_4\x11\x15aH\xADW`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x80\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0FaH\xDAaJ\xFAV[aH\xE2aKpV[\x860`@Q` \x01aH\xF8\x95\x94\x93\x92\x91\x90aswV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90PaI\x1A\x81\x84aE\x0CV[\x91PP\x92\x91PPV[_\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0FaIMaJ\xFAV[aIUaKpV[F0`@Q` \x01aIk\x95\x94\x93\x92\x91\x90aswV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x90V[_\x80_\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF]WnsW\xA4P\x1D\xDF\xE9/Fh\x1B \xA0\x84_\x1C\x11\x15aI\xC2W_`\x03\x85\x92P\x92P\x92PaJcV[_`\x01\x88\x88\x88\x88`@Q_\x81R` \x01`@R`@QaI\xE5\x94\x93\x92\x91\x90as\xC8V[` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15aJ\x05W=_\x80>=_\xFD[PPP` `@Q\x03Q\x90P_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x03aJVW_`\x01_\x80\x1B\x93P\x93P\x93PPaJcV[\x80_\x80_\x1B\x93P\x93P\x93PP[\x94P\x94P\x94\x91PPV[``\x82aJ\x82WaJ}\x82aK\xE7V[aJ\xF2V[_\x82Q\x14\x80\x15aJ\xA8WP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15aJ\xEAW\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01aJ\xE1\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[\x81\x90PaJ\xF3V[[\x93\x92PPPV[_\x80aK\x04a1\x86V[\x90P_aK\x0Fa1\xADV[\x90P_\x81Q\x11\x15aK+W\x80\x80Q\x90` \x01 \x92PPPaKmV[_\x82_\x01T\x90P_\x80\x1B\x81\x14aKFW\x80\x93PPPPaKmV[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x80aKza1\x86V[\x90P_aK\x85a2KV[\x90P_\x81Q\x11\x15aK\xA1W\x80\x80Q\x90` \x01 \x92PPPaK\xE4V[_\x82`\x01\x01T\x90P_\x80\x1B\x81\x14aK\xBDW\x80\x93PPPPaK\xE4V[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x81Q\x11\x15aK\xF9W\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x82\x80T\x82\x82U\x90_R` _ \x90\x81\x01\x92\x82\x15aLeW\x91` \x02\x82\x01[\x82\x81\x11\x15aLdW\x82Q\x82U\x91` \x01\x91\x90`\x01\x01\x90aLIV[[P\x90PaLr\x91\x90aL\xC1V[P\x90V[\x82\x80T\x82\x82U\x90_R` _ \x90\x81\x01\x92\x82\x15aL\xB0W\x91` \x02\x82\x01[\x82\x81\x11\x15aL\xAFW\x825\x82U\x91` \x01\x91\x90`\x01\x01\x90aL\x94V[[P\x90PaL\xBD\x91\x90aL\xC1V[P\x90V[[\x80\x82\x11\x15aL\xD8W_\x81_\x90UP`\x01\x01aL\xC2V[P\x90V[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[aL\xFF\x81aL\xEDV[\x81\x14aM\tW_\x80\xFD[PV[_\x815\x90PaM\x1A\x81aL\xF6V[\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12aMAWaM@aM V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aM^WaM]aM$V[[` \x83\x01\x91P\x83`\x01\x82\x02\x83\x01\x11\x15aMzWaMyaM(V[[\x92P\x92\x90PV[_\x80_\x80_\x80_`\x80\x88\x8A\x03\x12\x15aM\x9CWaM\x9BaL\xE5V[[_aM\xA9\x8A\x82\x8B\x01aM\x0CV[\x97PP` \x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aM\xCAWaM\xC9aL\xE9V[[aM\xD6\x8A\x82\x8B\x01aM,V[\x96P\x96PP`@\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aM\xF9WaM\xF8aL\xE9V[[aN\x05\x8A\x82\x8B\x01aM,V[\x94P\x94PP``\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aN(WaN'aL\xE9V[[aN4\x8A\x82\x8B\x01aM,V[\x92P\x92PP\x92\x95\x98\x91\x94\x97P\x92\x95PV[_` \x82\x84\x03\x12\x15aNZWaNYaL\xE5V[[_aNg\x84\x82\x85\x01aM\x0CV[\x91PP\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_aN\xC2\x82aN\x99V[\x90P\x91\x90PV[aN\xD2\x81aN\xB8V[\x82RPPV[_aN\xE3\x83\x83aN\xC9V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aO\x05\x82aNpV[aO\x0F\x81\x85aNzV[\x93PaO\x1A\x83aN\x8AV[\x80_[\x83\x81\x10\x15aOJW\x81QaO1\x88\x82aN\xD8V[\x97PaO<\x83aN\xEFV[\x92PP`\x01\x81\x01\x90PaO\x1DV[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01RaOo\x81\x84aN\xFBV[\x90P\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15aO\xAEW\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90PaO\x93V[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_aO\xD3\x82aOwV[aO\xDD\x81\x85aO\x81V[\x93PaO\xED\x81\x85` \x86\x01aO\x91V[aO\xF6\x81aO\xB9V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01RaP\x19\x81\x84aO\xC9V[\x90P\x92\x91PPV[_\x80\x83`\x1F\x84\x01\x12aP6WaP5aM V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aPSWaPRaM$V[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15aPoWaPnaM(V[[\x92P\x92\x90PV[_\x80_\x80`@\x85\x87\x03\x12\x15aP\x8EWaP\x8DaL\xE5V[[_\x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aP\xABWaP\xAAaL\xE9V[[aP\xB7\x87\x82\x88\x01aP!V[\x94P\x94PP` \x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aP\xDAWaP\xD9aL\xE9V[[aP\xE6\x87\x82\x88\x01aM,V[\x92P\x92PP\x92\x95\x91\x94P\x92PV[_\x81\x15\x15\x90P\x91\x90PV[aQ\x08\x81aP\xF4V[\x82RPPV[_` \x82\x01\x90PaQ!_\x83\x01\x84aP\xFFV[\x92\x91PPV[aQ0\x81aN\xB8V[\x81\x14aQ:W_\x80\xFD[PV[_\x815\x90PaQK\x81aQ'V[\x92\x91PPV[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[aQ\x8B\x82aO\xB9V[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15aQ\xAAWaQ\xA9aQUV[[\x80`@RPPPV[_aQ\xBCaL\xDCV[\x90PaQ\xC8\x82\x82aQ\x82V[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aQ\xE7WaQ\xE6aQUV[[aQ\xF0\x82aO\xB9V[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_aR\x1DaR\x18\x84aQ\xCDV[aQ\xB3V[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15aR9WaR8aQQV[[aRD\x84\x82\x85aQ\xFDV[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12aR`WaR_aM V[[\x815aRp\x84\x82` \x86\x01aR\x0BV[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15aR\x8FWaR\x8EaL\xE5V[[_aR\x9C\x85\x82\x86\x01aQ=V[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aR\xBDWaR\xBCaL\xE9V[[aR\xC9\x85\x82\x86\x01aRLV[\x91PP\x92P\x92\x90PV[_\x81\x90P\x91\x90PV[aR\xE5\x81aR\xD3V[\x82RPPV[_` \x82\x01\x90PaR\xFE_\x83\x01\x84aR\xDCV[\x92\x91PPV[_\x7F\xFF\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\x82\x16\x90P\x91\x90PV[aS8\x81aS\x04V[\x82RPPV[aSG\x81aL\xEDV[\x82RPPV[aSV\x81aN\xB8V[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[aS\x8E\x81aL\xEDV[\x82RPPV[_aS\x9F\x83\x83aS\x85V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aS\xC1\x82aS\\V[aS\xCB\x81\x85aSfV[\x93PaS\xD6\x83aSvV[\x80_[\x83\x81\x10\x15aT\x06W\x81QaS\xED\x88\x82aS\x94V[\x97PaS\xF8\x83aS\xABV[\x92PP`\x01\x81\x01\x90PaS\xD9V[P\x85\x93PPPP\x92\x91PPV[_`\xE0\x82\x01\x90PaT&_\x83\x01\x8AaS/V[\x81\x81\x03` \x83\x01RaT8\x81\x89aO\xC9V[\x90P\x81\x81\x03`@\x83\x01RaTL\x81\x88aO\xC9V[\x90PaT[``\x83\x01\x87aS>V[aTh`\x80\x83\x01\x86aSMV[aTu`\xA0\x83\x01\x85aR\xDCV[\x81\x81\x03`\xC0\x83\x01RaT\x87\x81\x84aS\xB7V[\x90P\x98\x97PPPPPPPPV[_\x80\x83`\x1F\x84\x01\x12aT\xAAWaT\xA9aM V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aT\xC7WaT\xC6aM$V[[` \x83\x01\x91P\x83`@\x82\x02\x83\x01\x11\x15aT\xE3WaT\xE2aM(V[[\x92P\x92\x90PV[_\x80\xFD[_`@\x82\x84\x03\x12\x15aU\x03WaU\x02aT\xEAV[[\x81\x90P\x92\x91PPV[_`@\x82\x84\x03\x12\x15aU!WaU aT\xEAV[[\x81\x90P\x92\x91PPV[_`@\x82\x84\x03\x12\x15aU?WaU>aT\xEAV[[\x81\x90P\x92\x91PPV[_\x80_\x80_\x80_\x80_\x80_a\x01 \x8C\x8E\x03\x12\x15aUhWaUgaL\xE5V[[_\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aU\x85WaU\x84aL\xE9V[[aU\x91\x8E\x82\x8F\x01aT\x95V[\x9BP\x9BPP` aU\xA4\x8E\x82\x8F\x01aT\xEEV[\x99PP``aU\xB5\x8E\x82\x8F\x01aU\x0CV[\x98PP`\xA0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aU\xD6WaU\xD5aL\xE9V[[aU\xE2\x8E\x82\x8F\x01aU*V[\x97PP`\xC0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aV\x03WaV\x02aL\xE9V[[aV\x0F\x8E\x82\x8F\x01aM,V[\x96P\x96PP`\xE0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aV2WaV1aL\xE9V[[aV>\x8E\x82\x8F\x01aM,V[\x94P\x94PPa\x01\0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aVbWaVaaL\xE9V[[aVn\x8E\x82\x8F\x01aM,V[\x92P\x92PP\x92\x95\x98\x9BP\x92\x95\x98\x9B\x90\x93\x96\x99PV[_\x80\x83`\x1F\x84\x01\x12aV\x98WaV\x97aM V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aV\xB5WaV\xB4aM$V[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15aV\xD1WaV\xD0aM(V[[\x92P\x92\x90PV[_\x80_\x80_\x80_\x80`\xC0\x89\x8B\x03\x12\x15aV\xF4WaV\xF3aL\xE5V[[_aW\x01\x8B\x82\x8C\x01aM\x0CV[\x98PP` aW\x12\x8B\x82\x8C\x01aU\x0CV[\x97PP``\x89\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aW3WaW2aL\xE9V[[aW?\x8B\x82\x8C\x01aT\x95V[\x96P\x96PP`\x80\x89\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aWbWaWaaL\xE9V[[aWn\x8B\x82\x8C\x01aV\x83V[\x94P\x94PP`\xA0\x89\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aW\x91WaW\x90aL\xE9V[[aW\x9D\x8B\x82\x8C\x01aM,V[\x92P\x92PP\x92\x95\x98P\x92\x95\x98\x90\x93\x96PV[_\x80_\x80_\x80_\x80_\x80_a\x01\0\x8C\x8E\x03\x12\x15aW\xCFWaW\xCEaL\xE5V[[_\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aW\xECWaW\xEBaL\xE9V[[aW\xF8\x8E\x82\x8F\x01aT\x95V[\x9BP\x9BPP` aX\x0B\x8E\x82\x8F\x01aT\xEEV[\x99PP``\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aX,WaX+aL\xE9V[[aX8\x8E\x82\x8F\x01aU*V[\x98PP`\x80aXI\x8E\x82\x8F\x01aQ=V[\x97PP`\xA0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aXjWaXiaL\xE9V[[aXv\x8E\x82\x8F\x01aM,V[\x96P\x96PP`\xC0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aX\x99WaX\x98aL\xE9V[[aX\xA5\x8E\x82\x8F\x01aM,V[\x94P\x94PP`\xE0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aX\xC8WaX\xC7aL\xE9V[[aX\xD4\x8E\x82\x8F\x01aM,V[\x92P\x92PP\x92\x95\x98\x9BP\x92\x95\x98\x9B\x90\x93\x96\x99PV[_\x80_\x80_``\x86\x88\x03\x12\x15aY\x02WaY\x01aL\xE5V[[_aY\x0F\x88\x82\x89\x01aQ=V[\x95PP` \x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aY0WaY/aL\xE9V[[aY<\x88\x82\x89\x01aT\x95V[\x94P\x94PP`@\x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aY_WaY^aL\xE9V[[aYk\x88\x82\x89\x01aM,V[\x92P\x92PP\x92\x95P\x92\x95\x90\x93PV[_` \x82\x01\x90PaY\x8D_\x83\x01\x84aSMV[\x92\x91PPV[aY\x9C\x81aP\xF4V[\x81\x14aY\xA6W_\x80\xFD[PV[_\x81Q\x90PaY\xB7\x81aY\x93V[\x92\x91PPV[_` \x82\x84\x03\x12\x15aY\xD2WaY\xD1aL\xE5V[[_aY\xDF\x84\x82\x85\x01aY\xA9V[\x91PP\x92\x91PPV[\x7FNH{q\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_R`!`\x04R`$_\xFD[_` \x82\x01\x90PaZ(_\x83\x01\x84aS>V[\x92\x91PPV[\x7FNH{q\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_R`\"`\x04R`$_\xFD[_`\x02\x82\x04\x90P`\x01\x82\x16\x80aZrW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03aZ\x85WaZ\x84aZ.V[[P\x91\x90PV[\x7FNH{q\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_R`\x11`\x04R`$_\xFD[_aZ\xC2\x82aL\xEDV[\x91PaZ\xCD\x83aL\xEDV[\x92P\x82\x82\x03\x90P\x81\x81\x11\x15aZ\xE5WaZ\xE4aZ\x8BV[[\x92\x91PPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_a[\x06\x83\x85aZ\xEBV[\x93Pa[\x13\x83\x85\x84aQ\xFDV[a[\x1C\x83aO\xB9V[\x84\x01\x90P\x93\x92PPPV[_`\x80\x82\x01\x90Pa[:_\x83\x01\x8AaS>V[\x81\x81\x03` \x83\x01Ra[M\x81\x88\x8AaZ\xFBV[\x90P\x81\x81\x03`@\x83\x01Ra[b\x81\x86\x88aZ\xFBV[\x90P\x81\x81\x03``\x83\x01Ra[w\x81\x84\x86aZ\xFBV[\x90P\x98\x97PPPPPPPPV[_\x81\x90P\x92\x91PPV[_a[\x99\x82aOwV[a[\xA3\x81\x85a[\x85V[\x93Pa[\xB3\x81\x85` \x86\x01aO\x91V[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_a[\xF3`\x02\x83a[\x85V[\x91Pa[\xFE\x82a[\xBFV[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_a\\=`\x01\x83a[\x85V[\x91Pa\\H\x82a\\\tV[`\x01\x82\x01\x90P\x91\x90PV[_a\\^\x82\x87a[\x8FV[\x91Pa\\i\x82a[\xE7V[\x91Pa\\u\x82\x86a[\x8FV[\x91Pa\\\x80\x82a\\1V[\x91Pa\\\x8C\x82\x85a[\x8FV[\x91Pa\\\x97\x82a\\1V[\x91Pa\\\xA3\x82\x84a[\x8FV[\x91P\x81\x90P\x95\x94PPPPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[a\\\xCD\x81a\\\xB1V[\x82RPPV[_` \x82\x01\x90Pa\\\xE6_\x83\x01\x84a\\\xC4V[\x92\x91PPV[_\x81Q\x90Pa\\\xFA\x81aQ'V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a]\x15Wa]\x14aL\xE5V[[_a]\"\x84\x82\x85\x01a\\\xECV[\x91PP\x92\x91PPV[\x7FNH{q\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_R`2`\x04R`$_\xFD[_\x82\x90P\x92\x91PPV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_` `\x1F\x83\x01\x04\x90P\x91\x90PV[_\x82\x82\x1B\x90P\x92\x91PPV[_`\x08\x83\x02a]\xBE\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82a]\x83V[a]\xC8\x86\x83a]\x83V[\x95P\x80\x19\x84\x16\x93P\x80\x86\x16\x84\x17\x92PPP\x93\x92PPPV[_\x81\x90P\x91\x90PV[_a^\x03a]\xFEa]\xF9\x84aL\xEDV[a]\xE0V[aL\xEDV[\x90P\x91\x90PV[_\x81\x90P\x91\x90PV[a^\x1C\x83a]\xE9V[a^0a^(\x82a^\nV[\x84\x84Ta]\x8FV[\x82UPPPPV[_\x90V[a^Da^8V[a^O\x81\x84\x84a^\x13V[PPPV[[\x81\x81\x10\x15a^rWa^g_\x82a^V[a]\xE0V[aL\xEDV[\x90P\x91\x90PV[abt\x81abJV[\x82RPPV[_`@\x82\x01\x90Pab\x8D_\x83\x01\x85abkV[ab\x9A` \x83\x01\x84aS>V[\x93\x92PPPV[_\x80\xFD[_\x80\xFD[_`@\x82\x84\x03\x12\x15ab\xBEWab\xBDab\xA1V[[ab\xC8`@aQ\xB3V[\x90P_ab\xD7\x84\x82\x85\x01aM\x0CV[_\x83\x01RP` ab\xEA\x84\x82\x85\x01aM\x0CV[` \x83\x01RP\x92\x91PPV[_`@\x82\x84\x03\x12\x15ac\x0BWac\naL\xE5V[[_ac\x18\x84\x82\x85\x01ab\xA9V[\x91PP\x92\x91PPV[_` \x82\x84\x03\x12\x15ac6Wac5aL\xE5V[[_acC\x84\x82\x85\x01aQ=V[\x91PP\x92\x91PPV[_\x81\x90P\x91\x90PV[_acc` \x84\x01\x84aQ=V[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_ac\x82\x83\x85aNzV[\x93Pac\x8D\x82acLV[\x80_[\x85\x81\x10\x15ac\xC5Wac\xA2\x82\x84acUV[ac\xAC\x88\x82aN\xD8V[\x97Pac\xB7\x83ackV[\x92PP`\x01\x81\x01\x90Pac\x90V[P\x85\x92PPP\x93\x92PPPV[_`@\x82\x01\x90Pac\xE5_\x83\x01\x86aSMV[\x81\x81\x03` \x83\x01Rac\xF8\x81\x84\x86acwV[\x90P\x94\x93PPPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[ad4\x81aR\xD3V[\x82RPPV[_adE\x83\x83ad+V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_adg\x82ad\x02V[adq\x81\x85ad\x0CV[\x93Pad|\x83ad\x1CV[\x80_[\x83\x81\x10\x15ad\xACW\x81Qad\x93\x88\x82ad:V[\x97Pad\x9E\x83adQV[\x92PP`\x01\x81\x01\x90Pad\x7FV[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Rad\xD1\x81\x84ad]V[\x90P\x92\x91PPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15ad\xF3Wad\xF2aQUV[[` \x82\x02\x90P` \x81\x01\x90P\x91\x90PV[ae\r\x81aR\xD3V[\x81\x14ae\x17W_\x80\xFD[PV[_\x81Q\x90Pae(\x81ae\x04V[\x92\x91PPV[_\x81Q\x90Pae<\x81aL\xF6V[\x92\x91PPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15ae\\Wae[aQUV[[` \x82\x02\x90P` \x81\x01\x90P\x91\x90PV[_ae\x7Faez\x84aeBV[aQ\xB3V[\x90P\x80\x83\x82R` \x82\x01\x90P` \x84\x02\x83\x01\x85\x81\x11\x15ae\xA2Wae\xA1aM(V[[\x83[\x81\x81\x10\x15ae\xCBW\x80ae\xB7\x88\x82a\\\xECV[\x84R` \x84\x01\x93PP` \x81\x01\x90Pae\xA4V[PPP\x93\x92PPPV[_\x82`\x1F\x83\x01\x12ae\xE9Wae\xE8aM V[[\x81Qae\xF9\x84\x82` \x86\x01aemV[\x91PP\x92\x91PPV[_`\x80\x82\x84\x03\x12\x15af\x17Waf\x16ab\xA1V[[af!`\x80aQ\xB3V[\x90P_af0\x84\x82\x85\x01ae\x1AV[_\x83\x01RP` afC\x84\x82\x85\x01ae.V[` \x83\x01RP`@afW\x84\x82\x85\x01ae\x1AV[`@\x83\x01RP``\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15af{Wafzab\xA5V[[af\x87\x84\x82\x85\x01ae\xD5V[``\x83\x01RP\x92\x91PPV[_af\xA5af\xA0\x84ad\xD9V[aQ\xB3V[\x90P\x80\x83\x82R` \x82\x01\x90P` \x84\x02\x83\x01\x85\x81\x11\x15af\xC8Waf\xC7aM(V[[\x83[\x81\x81\x10\x15ag\x0FW\x80Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15af\xEDWaf\xECaM V[[\x80\x86\x01af\xFA\x89\x82af\x02V[\x85R` \x85\x01\x94PPP` \x81\x01\x90Paf\xCAV[PPP\x93\x92PPPV[_\x82`\x1F\x83\x01\x12ag-Wag,aM V[[\x81Qag=\x84\x82` \x86\x01af\x93V[\x91PP\x92\x91PPV[_` \x82\x84\x03\x12\x15ag[WagZaL\xE5V[[_\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15agxWagwaL\xE9V[[ag\x84\x84\x82\x85\x01ag\x19V[\x91PP\x92\x91PPV[_ag\x97\x82aL\xEDV[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03ag\xC9Wag\xC8aZ\x8BV[[`\x01\x82\x01\x90P\x91\x90PV[_\x81Q\x90P\x91\x90PV[ag\xE7\x82ag\xD4V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15ah\0Wag\xFFaQUV[[ah\n\x82TaZ[V[ah\x15\x82\x82\x85a^vV[_` \x90P`\x1F\x83\x11`\x01\x81\x14ahFW_\x84\x15ah4W\x82\x87\x01Q\x90P[ah>\x85\x82a^\xE4V[\x86UPah\xA5V[`\x1F\x19\x84\x16ahT\x86a]bV[_[\x82\x81\x10\x15ah{W\x84\x89\x01Q\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90PahVV[\x86\x83\x10\x15ah\x98W\x84\x89\x01Qah\x94`\x1F\x89\x16\x82a^\xC8V[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_ah\xF0\x82aNpV[ah\xFA\x81\x85ah\xD6V[\x93Pai\x05\x83aN\x8AV[\x80_[\x83\x81\x10\x15ai5W\x81Qai\x1C\x88\x82aN\xD8V[\x97Pai'\x83aN\xEFV[\x92PP`\x01\x81\x01\x90Pai\x08V[P\x85\x93PPPP\x92\x91PPV[_`\x80\x83\x01_\x83\x01QaiW_\x86\x01\x82ad+V[P` \x83\x01Qaij` \x86\x01\x82aS\x85V[P`@\x83\x01Qai}`@\x86\x01\x82ad+V[P``\x83\x01Q\x84\x82\x03``\x86\x01Rai\x95\x82\x82ah\xE6V[\x91PP\x80\x91PP\x92\x91PPV[_ai\xAD\x83\x83aiBV[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_ai\xCB\x82ah\xADV[ai\xD5\x81\x85ah\xB7V[\x93P\x83` \x82\x02\x85\x01ai\xE7\x85ah\xC7V[\x80_[\x85\x81\x10\x15aj\"W\x84\x84\x03\x89R\x81Qaj\x03\x85\x82ai\xA2V[\x94Paj\x0E\x83ai\xB5V[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90Pai\xEAV[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_`\x80\x82\x01\x90P\x81\x81\x03_\x83\x01RajL\x81\x89ai\xC1V[\x90Paj[` \x83\x01\x88aSMV[\x81\x81\x03`@\x83\x01Rajn\x81\x86\x88aZ\xFBV[\x90P\x81\x81\x03``\x83\x01Raj\x83\x81\x84\x86aZ\xFBV[\x90P\x97\x96PPPPPPPV[`@\x82\x01aj\xA0_\x83\x01\x83acUV[aj\xAC_\x85\x01\x82aN\xC9V[Paj\xBA` \x83\x01\x83acUV[aj\xC7` \x85\x01\x82aN\xC9V[PPPPV[_`\x80\x82\x01\x90Paj\xE0_\x83\x01\x87aS>V[aj\xED` \x83\x01\x86aj\x90V[\x81\x81\x03``\x83\x01Rak\0\x81\x84\x86acwV[\x90P\x95\x94PPPPPV[_`@\x82\x01\x90Pak\x1E_\x83\x01\x85aR\xDCV[ak+` \x83\x01\x84aSMV[\x93\x92PPPV[_\x80\xFD[\x82\x81\x837PPPV[_akJ\x83\x85ad\x0CV[\x93P\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x15ak}Wak|ak2V[[` \x83\x02\x92Pak\x8E\x83\x85\x84ak6V[\x82\x84\x01\x90P\x93\x92PPPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Rak\xB3\x81\x84\x86ak?V[\x90P\x93\x92PPPV[_`@\x82\x01\x90P\x81\x81\x03_\x83\x01Rak\xD4\x81\x86ai\xC1V[\x90P\x81\x81\x03` \x83\x01Rak\xE9\x81\x84\x86aZ\xFBV[\x90P\x94\x93PPPPV[_\x81\x90P\x92\x91PPV[al\x06\x81aR\xD3V[\x82RPPV[_al\x17\x83\x83ak\xFDV[` \x83\x01\x90P\x92\x91PPV[_al-\x82ad\x02V[al7\x81\x85ak\xF3V[\x93PalB\x83ad\x1CV[\x80_[\x83\x81\x10\x15alrW\x81QalY\x88\x82al\x0CV[\x97Pald\x83adQV[\x92PP`\x01\x81\x01\x90PalEV[P\x85\x93PPPP\x92\x91PPV[_al\x8A\x82\x84al#V[\x91P\x81\x90P\x92\x91PPV[_\x81\x90P\x92\x91PPV[_al\xA9\x82ag\xD4V[al\xB3\x81\x85al\x95V[\x93Pal\xC3\x81\x85` \x86\x01aO\x91V[\x80\x84\x01\x91PP\x92\x91PPV[_al\xDA\x82\x84al\x9FV[\x91P\x81\x90P\x92\x91PPV[_`\xA0\x82\x01\x90Pal\xF8_\x83\x01\x88aR\xDCV[am\x05` \x83\x01\x87aR\xDCV[am\x12`@\x83\x01\x86aR\xDCV[am\x1F``\x83\x01\x85aR\xDCV[am,`\x80\x83\x01\x84aR\xDCV[\x96\x95PPPPPPV[_`@\x82\x01\x90PamI_\x83\x01\x85aS>V[amV` \x83\x01\x84aSMV[\x93\x92PPPV[_` \x82\x84\x03\x12\x15amrWamqaL\xE5V[[_am\x7F\x84\x82\x85\x01ae.V[\x91PP\x92\x91PPV[\x7FNH{q\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_R`\x12`\x04R`$_\xFD[_` \x82\x84\x03\x12\x15am\xCAWam\xC9aL\xE5V[[_am\xD7\x84\x82\x85\x01ae\x1AV[\x91PP\x92\x91PPV[_`\x80\x82\x01\x90Pam\xF3_\x83\x01\x87aR\xDCV[an\0` \x83\x01\x86aR\xDCV[an\r`@\x83\x01\x85aR\xDCV[an\x1A``\x83\x01\x84aR\xDCV[\x95\x94PPPPPV[_a\xFF\xFF\x82\x16\x90P\x91\x90PV[_anJanEan@\x84an#V[a]\xE0V[aL\xEDV[\x90P\x91\x90PV[anZ\x81an0V[\x82RPPV[_`@\x82\x01\x90Pans_\x83\x01\x85anQV[an\x80` \x83\x01\x84aS>V[\x93\x92PPPV[_`@\x82\x01\x90Pan\x9A_\x83\x01\x85aS>V[an\xA7` \x83\x01\x84aS>V[\x93\x92PPPV[_an\xB8\x82aL\xEDV[\x91Pan\xC3\x83aL\xEDV[\x92P\x82\x82\x02an\xD1\x81aL\xEDV[\x91P\x82\x82\x04\x84\x14\x83\x15\x17an\xE8Wan\xE7aZ\x8BV[[P\x92\x91PPV[_an\xF9\x82aL\xEDV[\x91Pao\x04\x83aL\xEDV[\x92P\x82\x82\x01\x90P\x80\x82\x11\x15ao\x1CWao\x1BaZ\x8BV[[\x92\x91PPV[`@\x82\x01_\x82\x01Qao6_\x85\x01\x82aS\x85V[P` \x82\x01QaoI` \x85\x01\x82aS\x85V[PPPPV[_``\x82\x01\x90Paob_\x83\x01\x85aS>V[aoo` \x83\x01\x84ao\"V[\x93\x92PPPV[_`@\x82\x01\x90Pao\x89_\x83\x01\x85aSMV[\x81\x81\x03` \x83\x01Rao\x9B\x81\x84aN\xFBV[\x90P\x93\x92PPPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Rao\xBD\x81\x84\x86aZ\xFBV[\x90P\x93\x92PPPV[_`\x80\x83\x01_\x83\x01Qao\xDB_\x86\x01\x82ad+V[P` \x83\x01Qao\xEE` \x86\x01\x82aS\x85V[P`@\x83\x01Qap\x01`@\x86\x01\x82ad+V[P``\x83\x01Q\x84\x82\x03``\x86\x01Rap\x19\x82\x82ah\xE6V[\x91PP\x80\x91PP\x92\x91PPV[_`@\x82\x01\x90P\x81\x81\x03_\x83\x01Rap>\x81\x85ao\xC6V[\x90P\x81\x81\x03` \x83\x01RapR\x81\x84ao\xC6V[\x90P\x93\x92PPPV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[`\x1F\x82\x11\x15ap\xAEWap\x7F\x81ap[V[ap\x88\x84a]tV[\x81\x01` \x85\x10\x15ap\x97W\x81\x90P[ap\xABap\xA3\x85a]tV[\x83\x01\x82a^TV[PP[PPPV[ap\xBC\x82aOwV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15ap\xD5Wap\xD4aQUV[[ap\xDF\x82TaZ[V[ap\xEA\x82\x82\x85apmV[_` \x90P`\x1F\x83\x11`\x01\x81\x14aq\x1BW_\x84\x15aq\tW\x82\x87\x01Q\x90P[aq\x13\x85\x82a^\xE4V[\x86UPaqzV[`\x1F\x19\x84\x16aq)\x86ap[V[_[\x82\x81\x10\x15aqPW\x84\x89\x01Q\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90Paq+V[\x86\x83\x10\x15aqmW\x84\x89\x01Qaqi`\x1F\x89\x16\x82a^\xC8V[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPV[aq\x8B\x81ab>V[\x82RPPV[_` \x82\x01\x90Paq\xA4_\x83\x01\x84aq\x82V[\x92\x91PPV[`T\x81\x10aq\xBBWaq\xBAaY\xE8V[[PV[_\x81\x90Paq\xCB\x82aq\xAAV[\x91\x90PV[_aq\xDA\x82aq\xBEV[\x90P\x91\x90PV[aq\xEA\x81aq\xD0V[\x82RPPV[_` \x82\x01\x90Par\x03_\x83\x01\x84aq\xE1V[\x92\x91PPV[_\x81\x90P\x92\x91PPV[ar\x1C\x81aN\xB8V[\x82RPPV[_ar-\x83\x83ar\x13V[` \x83\x01\x90P\x92\x91PPV[_arC\x82aNpV[arM\x81\x85ar\tV[\x93ParX\x83aN\x8AV[\x80_[\x83\x81\x10\x15ar\x88W\x81Qaro\x88\x82ar\"V[\x97Parz\x83aN\xEFV[\x92PP`\x01\x81\x01\x90Par[V[P\x85\x93PPPP\x92\x91PPV[_ar\xA0\x82\x84ar9V[\x91P\x81\x90P\x92\x91PPV[_`\xE0\x82\x01\x90Par\xBE_\x83\x01\x8AaR\xDCV[ar\xCB` \x83\x01\x89aR\xDCV[ar\xD8`@\x83\x01\x88aR\xDCV[ar\xE5``\x83\x01\x87aSMV[ar\xF2`\x80\x83\x01\x86aS>V[ar\xFF`\xA0\x83\x01\x85aS>V[as\x0C`\xC0\x83\x01\x84aR\xDCV[\x98\x97PPPPPPPPV[_`\xC0\x82\x01\x90Pas+_\x83\x01\x89aR\xDCV[as8` \x83\x01\x88aR\xDCV[asE`@\x83\x01\x87aR\xDCV[asR``\x83\x01\x86aS>V[as_`\x80\x83\x01\x85aS>V[asl`\xA0\x83\x01\x84aR\xDCV[\x97\x96PPPPPPPV[_`\xA0\x82\x01\x90Pas\x8A_\x83\x01\x88aR\xDCV[as\x97` \x83\x01\x87aR\xDCV[as\xA4`@\x83\x01\x86aR\xDCV[as\xB1``\x83\x01\x85aS>V[as\xBE`\x80\x83\x01\x84aSMV[\x96\x95PPPPPPV[_`\x80\x82\x01\x90Pas\xDB_\x83\x01\x87aR\xDCV[as\xE8` \x83\x01\x86aq\x82V[as\xF5`@\x83\x01\x85aR\xDCV[at\x02``\x83\x01\x84aR\xDCV[\x95\x94PPPPPV\xFEUserDecryptResponseVerification(bytes publicKey,bytes32[] ctHandles,bytes userDecryptedShare,bytes extraData)PublicDecryptVerification(bytes32[] ctHandles,bytes decryptedResult,bytes extraData)UserDecryptRequestVerification(bytes publicKey,address[] contractAddresses,uint256 startTimestamp,uint256 durationDays,bytes extraData)DelegatedUserDecryptRequestVerification(bytes publicKey,address[] contractAddresses,address delegatorAddress,uint256 startTimestamp,uint256 durationDays,bytes extraData)", + b"`\xA0`@R0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RP4\x80\x15b\0\0CW_\x80\xFD[Pb\0\0Tb\0\0Z` \x1B` \x1CV[b\0\x01\xC4V[_b\0\0kb\0\x01^` \x1B` \x1CV[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15b\0\0\xB6W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14b\0\x01[Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Qb\0\x01R\x91\x90b\0\x01\xA9V[`@Q\x80\x91\x03\x90\xA1[PV[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[b\0\x01\xA3\x81b\0\x01\x85V[\x82RPPV[_` \x82\x01\x90Pb\0\x01\xBE_\x83\x01\x84b\0\x01\x98V[\x92\x91PPV[`\x80Qafnb\0\x01\xEB_9_\x81\x81a#:\x01R\x81\x81a#\x8F\x01Ra&1\x01Rafn_\xF3\xFE`\x80`@R`\x046\x10a\0\xFDW_5`\xE0\x1C\x80cX\xF5\xB8\xAB\x11a\0\x94W\x80c\x84\xB0\x19n\x11a\0cW\x80c\x84\xB0\x19n\x14a\x02\xE1W\x80c\xAD<\xB1\xCC\x14a\x03\x11W\x80c\xD8\x99\x8FE\x14a\x03;W\x80c\xF1\xB5z\xDB\x14a\x03cW\x80c\xFB\xB82Y\x14a\x03\x8BWa\0\xFDV[\x80cX\xF5\xB8\xAB\x14a\x02=W\x80c\\\x97Z\xBB\x14a\x02yW\x80co\x89\x13\xBC\x14a\x02\xA3W\x80c\x84V\xCBY\x14a\x02\xCBWa\0\xFDV[\x80c?K\xA8:\x11a\0\xD0W\x80c?K\xA8:\x14a\x01\xA5W\x80c@\x14\xC4\xCD\x14a\x01\xBBW\x80cO\x1E\xF2\x86\x14a\x01\xF7W\x80cR\xD1\x90-\x14a\x02\x13Wa\0\xFDV[\x80c\x04o\x9E\xB3\x14a\x01\x01W\x80c\t\0\xCCi\x14a\x01)W\x80c\r\x8En,\x14a\x01eW\x80c9\xF78\x10\x14a\x01\x8FW[_\x80\xFD[4\x80\x15a\x01\x0CW_\x80\xFD[Pa\x01'`\x04\x806\x03\x81\x01\x90a\x01\"\x91\x90aB\x08V[a\x03\xC7V[\0[4\x80\x15a\x014W_\x80\xFD[Pa\x01O`\x04\x806\x03\x81\x01\x90a\x01J\x91\x90aB\xCCV[a\x08SV[`@Qa\x01\\\x91\x90aC\xDEV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01pW_\x80\xFD[Pa\x01ya\t$V[`@Qa\x01\x86\x91\x90aD\x88V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x9AW_\x80\xFD[Pa\x01\xA3a\t\x9FV[\0[4\x80\x15a\x01\xB0W_\x80\xFD[Pa\x01\xB9a\x0B\xD7V[\0[4\x80\x15a\x01\xC6W_\x80\xFD[Pa\x01\xE1`\x04\x806\x03\x81\x01\x90a\x01\xDC\x91\x90aD\xFDV[a\r\x1FV[`@Qa\x01\xEE\x91\x90aE\x95V[`@Q\x80\x91\x03\x90\xF3[a\x02\x11`\x04\x806\x03\x81\x01\x90a\x02\x0C\x91\x90aG\0V[a\x0E\xACV[\0[4\x80\x15a\x02\x1EW_\x80\xFD[Pa\x02'a\x0E\xCBV[`@Qa\x024\x91\x90aGrV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02HW_\x80\xFD[Pa\x02c`\x04\x806\x03\x81\x01\x90a\x02^\x91\x90aB\xCCV[a\x0E\xFCV[`@Qa\x02p\x91\x90aE\x95V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\x84W_\x80\xFD[Pa\x02\x8Da\x0F/V[`@Qa\x02\x9A\x91\x90aE\x95V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\xAEW_\x80\xFD[Pa\x02\xC9`\x04\x806\x03\x81\x01\x90a\x02\xC4\x91\x90aB\x08V[a\x0FQV[\0[4\x80\x15a\x02\xD6W_\x80\xFD[Pa\x02\xDFa\x13XV[\0[4\x80\x15a\x02\xECW_\x80\xFD[Pa\x02\xF5a\x14}V[`@Qa\x03\x08\x97\x96\x95\x94\x93\x92\x91\x90aH\x9AV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\x1CW_\x80\xFD[Pa\x03%a\x15\x86V[`@Qa\x032\x91\x90aD\x88V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03FW_\x80\xFD[Pa\x03a`\x04\x806\x03\x81\x01\x90a\x03\\\x91\x90aD\xFDV[a\x15\xBFV[\0[4\x80\x15a\x03nW_\x80\xFD[Pa\x03\x89`\x04\x806\x03\x81\x01\x90a\x03\x84\x91\x90aI\xB1V[a\x17}V[\0[4\x80\x15a\x03\x96W_\x80\xFD[Pa\x03\xB1`\x04\x806\x03\x81\x01\x90a\x03\xAC\x91\x90aJ\xEBV[a\x1C.V[`@Qa\x03\xBE\x91\x90aE\x95V[`@Q\x80\x91\x03\x90\xF3[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x04\x14\x91\x90aK|V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04/W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04S\x91\x90aK\xBFV[a\x04\x94W3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x04\x8B\x91\x90aK|V[`@Q\x80\x91\x03\x90\xFD[_a\x04\x9Da\x1E\x9DV[\x90P`\xF8`\x02`\x05\x81\x11\x15a\x04\xB5Wa\x04\xB4aK\xEAV[[\x90\x1B\x88\x11\x15\x80a\x04\xC8WP\x80`\x08\x01T\x88\x11[\x15a\x05\nW\x87`@Q\x7F\xD4\x8A\xF9B\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\x81R`\x04\x01a\x05\x01\x91\x90aL\x17V[`@Q\x80\x91\x03\x90\xFD[_\x81`\x07\x01_\x8A\x81R` \x01\x90\x81R` \x01_ `@Q\x80`@\x01`@R\x90\x81_\x82\x01\x80Ta\x058\x90aL]V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x05d\x90aL]V[\x80\x15a\x05\xAFW\x80`\x1F\x10a\x05\x86Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x05\xAFV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x05\x92W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81R` \x01`\x01\x82\x01\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x06\x05W` \x02\x82\x01\x91\x90_R` _ \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x05\xF1W[PPPPP\x81RPP\x90P_`@Q\x80`\x80\x01`@R\x80\x83_\x01Q\x81R` \x01\x83` \x01Q\x81R` \x01\x8A\x8A\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90P_a\x06\xCB\x82a\x1E\xC4V[\x90Pa\x06\xD9\x8B\x82\x8A\x8Aa\x1F\x8BV[_\x84`\x02\x01_\x8D\x81R` \x01\x90\x81R` \x01_ _\x80_\x1B\x81R` \x01\x90\x81R` \x01_ \x90P\x803\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x8B\x7F\x7F\xCD\xFBS\x81\x91\x7FUJq}\nTp\xA3?ZI\xBAdE\xF0^\xC4a\x1E\x9DV[\x90P`\xF8`\x01`\x05\x81\x11\x15a\x0BVWa\x0BUaK\xEAV[[\x90\x1B\x81`\x06\x01\x81\x90UP`\xF8`\x02`\x05\x81\x11\x15a\x0BvWa\x0BuaK\xEAV[[\x90\x1B\x81`\x08\x01\x81\x90UPP_\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x82`@Qa\x0B\xCB\x91\x90aN\xD5V[`@Q\x80\x91\x03\x90\xA1PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0C4W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0CX\x91\x90aO\x02V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15\x80\x15a\x0C\xD3WPs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\r\x15W3`@Q\x7F\xE1\x91f\xEE\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\x81R`\x04\x01a\r\x0C\x91\x90aK|V[`@Q\x80\x91\x03\x90\xFD[a\r\x1Da\"\xCAV[V[_\x80_\x90P[\x85\x85\x90P\x81\x10\x15a\x0E\x9EWs\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x06 2m\x87\x87\x84\x81\x81\x10a\rsWa\rraO-V[[\x90P` \x02\x015`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\r\x96\x91\x90aGrV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\r\xB1W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\r\xD5\x91\x90aK\xBFV[\x15\x80a\x0E\x83WPs\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xDC\x9Ao\x87\x87\x84\x81\x81\x10a\x0E\x1FWa\x0E\x1EaO-V[[\x90P` \x02\x015`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0EB\x91\x90aGrV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E]W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0E\x81\x91\x90aK\xBFV[\x15[\x15a\x0E\x91W_\x91PPa\x0E\xA4V[\x80\x80`\x01\x01\x91PPa\r%V[P`\x01\x90P[\x94\x93PPPPV[a\x0E\xB4a#8V[a\x0E\xBD\x82a$\x1EV[a\x0E\xC7\x82\x82a%\x11V[PPV[_a\x0E\xD4a&/V[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[_\x80a\x0F\x06a\x1E\x9DV[\x90P\x80_\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[_\x80a\x0F9a&\xB6V[\x90P\x80_\x01_\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x90V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0F\x9E\x91\x90aK|V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0F\xB9W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0F\xDD\x91\x90aK\xBFV[a\x10\x1EW3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x10\x15\x91\x90aK|V[`@Q\x80\x91\x03\x90\xFD[_a\x10'a\x1E\x9DV[\x90P`\xF8`\x01`\x05\x81\x11\x15a\x10?Wa\x10>aK\xEAV[[\x90\x1B\x88\x11\x15\x80a\x10RWP\x80`\x06\x01T\x88\x11[\x15a\x10\x94W\x87`@Q\x7F\xD4\x8A\xF9B\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\x81R`\x04\x01a\x10\x8B\x91\x90aL\x17V[`@Q\x80\x91\x03\x90\xFD[_`@Q\x80``\x01`@R\x80\x83`\x05\x01_\x8C\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x10\xFBW` \x02\x82\x01\x91\x90_R` _ \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x10\xE7W[PPPPP\x81R` \x01\x89\x89\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x85\x85\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90P_a\x11\xA1\x82a&\xDDV[\x90Pa\x11\xAF\x8A\x82\x89\x89a\x1F\x8BV[_\x83`\x04\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _\x83\x81R` \x01\x90\x81R` \x01_ \x90P\x80\x88\x88\x90\x91\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x92\x90\x91\x92\x90\x91\x92\x90\x91\x92P\x91\x82a\x12\r\x92\x91\x90aQ\x01V[P\x83`\x02\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _\x83\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x83_\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x12\xC3WPa\x12\xC2\x81\x80T\x90Pa'\x97V[[\x15a\x13KW`\x01\x84_\x01_\x8D\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x81\x84`\x03\x01_\x8D\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x8A\x7F\xD7\xE5\x8A6z\nl)\x8Ev\xAD]$\0\x04\xE3'\xAA\x14#\xCB\xE4\xBD\x7F\xF8]Lq^\xF8\xD1_\x8B\x8B\x84\x8A\x8A`@Qa\x13B\x95\x94\x93\x92\x91\x90aS\x1CV[`@Q\x80\x91\x03\x90\xA2[PPPPPPPPPPPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cF\xFB\xF6\x8E3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\xA5\x91\x90aK|V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x13\xC0W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13\xE4\x91\x90aK\xBFV[\x15\x80\x15a\x141WPs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x14sW3`@Q\x7F8\x89\x16\xBB\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\x81R`\x04\x01a\x14j\x91\x90aK|V[`@Q\x80\x91\x03\x90\xFD[a\x14{a((V[V[_``\x80_\x80_``_a\x14\x8Fa(\x97V[\x90P_\x80\x1B\x81_\x01T\x14\x80\x15a\x14\xAAWP_\x80\x1B\x81`\x01\x01T\x14[a\x14\xE9W`@Q\x7F\x08\xC3y\xA0\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\x81R`\x04\x01a\x14\xE0\x90aS\xB4V[`@Q\x80\x91\x03\x90\xFD[a\x14\xF1a(\xBEV[a\x14\xF9a)\\V[F0_\x80\x1B_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x15\x18Wa\x15\x17aE\xDCV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x15FW\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x7F\x0F\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\x95\x94\x93\x92\x91\x90\x97P\x97P\x97P\x97P\x97P\x97P\x97PP\x90\x91\x92\x93\x94\x95\x96V[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[a\x15\xC7a)\xFAV[_\x84\x84\x90P\x03a\x16\x03W`@Q\x7F-\xE7T8\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x16L\x84\x84\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa*;V[_s\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xA1O\x89q\x86\x86`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x16\x9C\x92\x91\x90aTJV[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x16\xB6W=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x16\xDE\x91\x90aV\xE1V[\x90Pa\x16\xE9\x81a*\xF3V[_a\x16\xF2a\x1E\x9DV[\x90P\x80`\x06\x01_\x81T\x80\x92\x91\x90a\x17\x08\x90aW(V[\x91\x90PUP_\x81`\x06\x01T\x90P\x86\x86\x83`\x05\x01_\x84\x81R` \x01\x90\x81R` \x01_ \x91\x90a\x177\x92\x91\x90a@\xB2V[P\x80\x7F\"\xDBH\n9\xBDrUd8\xAA\xDBJ2\xA3\xD2\xA6c\x8B\x87\xC0;\xBE\xC5\xFE\xF6\x99~\x10\x95\x87\xFF\x84\x87\x87`@Qa\x17l\x93\x92\x91\x90aY\x05V[`@Q\x80\x91\x03\x90\xA2PPPPPPPV[a\x17\x85a)\xFAV[_\x88\x80` \x01\x90a\x17\x96\x91\x90aYHV[\x90P\x03a\x17\xCFW`@Q\x7FW\xCF\xA2\x17\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\n`\xFF\x16\x88\x80` \x01\x90a\x17\xE4\x91\x90aYHV[\x90P\x11\x15a\x18=W`\n\x88\x80` \x01\x90a\x17\xFE\x91\x90aYHV[\x90P`@Q\x7F\xAF\x1F\x04\x95\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\x81R`\x04\x01a\x184\x92\x91\x90aY\xE6V[`@Q\x80\x91\x03\x90\xFD[a\x18V\x89\x806\x03\x81\x01\x90a\x18Q\x91\x90aZZV[a+\xD9V[a\x18\xAE\x88\x80` \x01\x90a\x18i\x91\x90aYHV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x88a-$V[\x15a\x19\x02W\x86\x88\x80` \x01\x90a\x18\xC4\x91\x90aYHV[`@Q\x7F\xDCMx\xB1\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\x81R`\x04\x01a\x18\xF9\x93\x92\x91\x90a[\x0BV[`@Q\x80\x91\x03\x90\xFD[_a\x19]\x8C\x8C\x8B\x80` \x01\x90a\x19\x18\x91\x90aYHV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x8Ba-\xA2V[\x90P_`@Q\x80`\xA0\x01`@R\x80\x89\x89\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x8B\x80` \x01\x90a\x19\xC4\x91\x90aYHV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x8C_\x015\x81R` \x01\x8C` \x015\x81R` \x01\x85\x85\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90Pa\x1At\x81\x8A\x88\x88\x8E_\x015a/\x95V[_s\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xA1O\x89q\x84`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1A\xC2\x91\x90a[\xD3V[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1A\xDCW=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1B\x04\x91\x90aV\xE1V[\x90Pa\x1B\x0F\x81a*\xF3V[_a\x1B\x18a\x1E\x9DV[\x90P\x80`\x08\x01_\x81T\x80\x92\x91\x90a\x1B.\x90aW(V[\x91\x90PUP_\x81`\x08\x01T\x90P`@Q\x80`@\x01`@R\x80\x8C\x8C\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x86\x81RP\x82`\x07\x01_\x83\x81R` \x01\x90\x81R` \x01_ _\x82\x01Q\x81_\x01\x90\x81a\x1B\xB9\x91\x90a[\xFDV[P` \x82\x01Q\x81`\x01\x01\x90\x80Q\x90` \x01\x90a\x1B\xD6\x92\x91\x90a@\xFDV[P\x90PP\x80\x7F\xF9\x01\x1B\xD6\xBA\r\xA6\x04\x9CR\rp\xFEYq\xF1~\xD7\xAByT\x86\x05%D\xB5\x10\x19\x89lYk\x84\x8E\x8E\x8E\x8C\x8C`@Qa\x1C\x14\x96\x95\x94\x93\x92\x91\x90a\\\xCCV[`@Q\x80\x91\x03\x90\xA2PPPPPPPPPPPPPPPPV[_\x80_\x90P[\x85\x85\x90P\x81\x10\x15a\x1E\x8EWs\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC6R\x8Fi\x87\x87\x84\x81\x81\x10a\x1C\x82Wa\x1C\x81aO-V[[\x90P`@\x02\x01_\x015\x89`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1C\xA9\x92\x91\x90a](V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1C\xC4W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1C\xE8\x91\x90aK\xBFV[\x15\x80a\x1D\xC4WPs\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC6R\x8Fi\x87\x87\x84\x81\x81\x10a\x1D2Wa\x1D1aO-V[[\x90P`@\x02\x01_\x015\x88\x88\x85\x81\x81\x10a\x1DNWa\x1DMaO-V[[\x90P`@\x02\x01` \x01` \x81\x01\x90a\x1Df\x91\x90a]OV[`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\x83\x92\x91\x90a](V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1D\x9EW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1D\xC2\x91\x90aK\xBFV[\x15[\x80a\x1EsWPs\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xDC\x9Ao\x87\x87\x84\x81\x81\x10a\x1E\rWa\x1E\x0CaO-V[[\x90P`@\x02\x01_\x015`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E2\x91\x90aGrV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1EMW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1Eq\x91\x90aK\xBFV[\x15[\x15a\x1E\x81W_\x91PPa\x1E\x94V[\x80\x80`\x01\x01\x91PPa\x1C4V[P`\x01\x90P[\x95\x94PPPPPV[_\x7Fh\x11>h\xAFILn\xFD\x02\x10\xFCK\xF9\xBAt\x8D\x1F\xFA\xDA\xA4q\x82\x17\xFD\xF65H\xC4\xAE\xE7\0\x90P\x90V[_a\x1F\x84`@Q\x80`\xA0\x01`@R\x80`m\x81R` \x01ae&`m\x919\x80Q\x90` \x01 \x83_\x01Q\x80Q\x90` \x01 \x84` \x01Q`@Q` \x01a\x1F\x08\x91\x90a^\x06V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x85`@\x01Q\x80Q\x90` \x01 \x86``\x01Q`@Q` \x01a\x1F?\x91\x90a^VV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a\x1Fi\x95\x94\x93\x92\x91\x90a^lV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a0mV[\x90P\x91\x90PV[_a\x1F\x94a\x1E\x9DV[\x90P_a\x1F\xE4\x85\x85\x85\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa0\x86V[\x90Pa\x1F\xEF\x81a0\xB0V[\x81`\x01\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a \x8EW\x85\x81`@Q\x7F\x99\xECH\xD9\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\x81R`\x04\x01a \x85\x92\x91\x90a^\xBDV[`@Q\x80\x91\x03\x90\xFD[`\x01\x82`\x01\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPPPPPPPV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC2\xB4)\x86`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a![W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a!\x7F\x91\x90a^\xE4V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[``_`\x01a!\x9B\x84a1\x80V[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a!\xB9Wa!\xB8aE\xDCV[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a!\xEBW\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a\"LW\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a\"AWa\"@a_\x0FV[[\x04\x94P_\x85\x03a!\xF8W[\x81\x93PPPP\x91\x90PV[_a\"`a\"{V[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[a\"\xAAa2\xD1V[a\"\xB4\x82\x82a3\x11V[PPV[a\"\xC0a2\xD1V[a\"\xC8a3bV[V[a\"\xD2a3\x92V[_a\"\xDBa&\xB6V[\x90P_\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F]\xB9\xEE\nI[\xF2\xE6\xFF\x9C\x91\xA7\x83L\x1B\xA4\xFD\xD2D\xA5\xE8\xAANS{\xD3\x8A\xEA\xE4\xB0s\xAAa# a3\xD2V[`@Qa#-\x91\x90aK|V[`@Q\x80\x91\x03\x90\xA1PV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a#\xE5WP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a#\xCCa3\xD9V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a$\x1CW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a${W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a$\x9F\x91\x90aO\x02V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a%\x0EW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a%\x05\x91\x90aK|V[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a%yWP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a%v\x91\x90a_ v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a& W\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a&\x17\x91\x90aGrV[`@Q\x80\x91\x03\x90\xFD[a&*\x83\x83a4,V[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a&\xB4W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x7F\xCD^\xD1\\n\x18~w\xE9\xAE\xE8\x81\x84\xC2\x1FO!\x82\xABX'\xCB;~\x07\xFB\xED\xCDc\xF03\0\x90P\x90V[_a'\x90`@Q\x80`\x80\x01`@R\x80`T\x81R` \x01ae\x93`T\x919\x80Q\x90` \x01 \x83_\x01Q`@Q` \x01a'\x15\x91\x90a^\x06V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x84` \x01Q\x80Q\x90` \x01 \x85`@\x01Q`@Q` \x01a'L\x91\x90a^VV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a'u\x94\x93\x92\x91\x90a_gV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a0mV[\x90P\x91\x90PV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c*8\x89\x98`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a'\xF6W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a(\x1A\x91\x90a^\xE4V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[a(0a)\xFAV[_a(9a&\xB6V[\x90P`\x01\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7Fb\xE7\x8C\xEA\x01\xBE\xE3 \xCDNB\x02p\xB5\xEAt\0\r\x11\xB0\xC9\xF7GT\xEB\xDB\xFCTK\x05\xA2Xa(\x7Fa3\xD2V[`@Qa(\x8C\x91\x90aK|V[`@Q\x80\x91\x03\x90\xA1PV[_\x7F\xA1jF\xD9Ba\xC7Q|\xC8\xFF\x89\xF6\x1C\x0C\xE95\x98\xE3\xC8I\x80\x10\x11\xDE\xE6I\xA6\xA5W\xD1\0\x90P\x90V[``_a(\xC9a(\x97V[\x90P\x80`\x02\x01\x80Ta(\xDA\x90aL]V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta)\x06\x90aL]V[\x80\x15a)QW\x80`\x1F\x10a)(Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a)QV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a)4W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[``_a)ga(\x97V[\x90P\x80`\x03\x01\x80Ta)x\x90aL]V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta)\xA4\x90aL]V[\x80\x15a)\xEFW\x80`\x1F\x10a)\xC6Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a)\xEFV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a)\xD2W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[a*\x02a\x0F/V[\x15a*9W`@Q\x7F\xD9<\x06e\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x80[\x82Q\x81\x10\x15a*\xA3W_\x83\x82\x81Q\x81\x10a*[Wa*ZaO-V[[` \x02` \x01\x01Q\x90P_a*o\x82a4\x9EV[\x90Pa*z\x81a5(V[a\xFF\xFF\x16\x84a*\x89\x91\x90a_\xAAV[\x93Pa*\x94\x82a7\x13V[PP\x80\x80`\x01\x01\x91PPa*>V[Pa\x08\0\x81\x11\x15a*\xEFWa\x08\0\x81`@Q\x7F\xE7\xF4\x89]\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\x81R`\x04\x01a*\xE6\x92\x91\x90a_\xDDV[`@Q\x80\x91\x03\x90\xFD[PPV[`\x01\x81Q\x11\x15a+\xD6W_\x81_\x81Q\x81\x10a+\x11Wa+\x10aO-V[[` \x02` \x01\x01Q` \x01Q\x90P_`\x01\x90P[\x82Q\x81\x10\x15a+\xD3W\x81\x83\x82\x81Q\x81\x10a+BWa+AaO-V[[` \x02` \x01\x01Q` \x01Q\x14a+\xC6W\x82_\x81Q\x81\x10a+fWa+eaO-V[[` \x02` \x01\x01Q\x83\x82\x81Q\x81\x10a+\x81Wa+\x80aO-V[[` \x02` \x01\x01Q`@Q\x7F\xCF\xAE\x92\x1F\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\x81R`\x04\x01a+\xBD\x92\x91\x90a`dV[`@Q\x80\x91\x03\x90\xFD[\x80\x80`\x01\x01\x91PPa+%V[PP[PV[_\x81` \x01Q\x03a,\x16W`@Q\x7F\xDE(Y\xC1\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x01ma\xFF\xFF\x16\x81` \x01Q\x11\x15a,mWa\x01m\x81` \x01Q`@Q\x7F2\x95\x18c\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\x81R`\x04\x01a,d\x92\x91\x90a`\xD6V[`@Q\x80\x91\x03\x90\xFD[B\x81_\x01Q\x11\x15a,\xBAWB\x81_\x01Q`@Q\x7F\xF2L\x08\x87\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\x81R`\x04\x01a,\xB1\x92\x91\x90a_\xDDV[`@Q\x80\x91\x03\x90\xFD[Bb\x01Q\x80\x82` \x01Qa,\xCE\x91\x90a`\xFDV[\x82_\x01Qa,\xDC\x91\x90a_\xAAV[\x10\x15a-!WB\x81`@Q\x7F04\x80@\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\x81R`\x04\x01a-\x18\x92\x91\x90aakV[`@Q\x80\x91\x03\x90\xFD[PV[_\x80_\x90P[\x83Q\x81\x10\x15a-\x97W\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84\x82\x81Q\x81\x10a-]Wa-\\aO-V[[` \x02` \x01\x01Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x03a-\x8AW`\x01\x91PPa-\x9CV[\x80\x80`\x01\x01\x91PPa-*V[P_\x90P[\x92\x91PPV[``_\x85\x85\x90P\x03a-\xE0W`@Q\x7F\xA6\xA6\xCB!\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84\x84\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a-\xFDWa-\xFCaE\xDCV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a.+W\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x80[\x86\x86\x90P\x81\x10\x15a/@W_\x87\x87\x83\x81\x81\x10a.PWa.OaO-V[[\x90P`@\x02\x01_\x015\x90P_\x88\x88\x84\x81\x81\x10a.oWa.naO-V[[\x90P`@\x02\x01` \x01` \x81\x01\x90a.\x87\x91\x90a]OV[\x90P_a.\x93\x83a4\x9EV[\x90Pa.\x9E\x81a5(V[a\xFF\xFF\x16\x85a.\xAD\x91\x90a_\xAAV[\x94Pa.\xB9\x83\x88a7\xE3V[a.\xC3\x83\x83a7\xE3V[a.\xCD\x88\x83a-$V[a/\x10W\x81\x88`@Q\x7F\xA4\xC3\x03\x91\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\x81R`\x04\x01a/\x07\x92\x91\x90aa\x92V[`@Q\x80\x91\x03\x90\xFD[\x82\x86\x85\x81Q\x81\x10a/$Wa/#aO-V[[` \x02` \x01\x01\x81\x81RPPPPP\x80\x80`\x01\x01\x91PPa.1V[Pa\x08\0\x81\x11\x15a/\x8CWa\x08\0\x81`@Q\x7F\xE7\xF4\x89]\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\x81R`\x04\x01a/\x83\x92\x91\x90a_\xDDV[`@Q\x80\x91\x03\x90\xFD[P\x94\x93PPPPV[_a/\xA0\x86\x83a8\xB8V[\x90P_a/\xF0\x82\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa0\x86V[\x90P\x85s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a0dW\x84\x84`@Q\x7F*\x87='\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\x81R`\x04\x01a0[\x92\x91\x90aa\xC0V[`@Q\x80\x91\x03\x90\xFD[PPPPPPPV[_a0\x7Fa0ya9\x85V[\x83a9\x93V[\x90P\x91\x90PV[_\x80_\x80a0\x94\x86\x86a9\xD3V[\x92P\x92P\x92Pa0\xA4\x82\x82a:(V[\x82\x93PPPP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c =\x01\x14\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a0\xFD\x91\x90aK|V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a1\x18W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a1<\x91\x90aK\xBFV[a1}W\x80`@Q\x7F*|n\xF6\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\x81R`\x04\x01a1t\x91\x90aK|V[`@Q\x80\x91\x03\x90\xFD[PV[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a1\xDCWz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a1\xD2Wa1\xD1a_\x0FV[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a2\x19Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a2\x0FWa2\x0Ea_\x0FV[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a2HWf#\x86\xF2o\xC1\0\0\x83\x81a2>Wa2=a_\x0FV[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a2qWc\x05\xF5\xE1\0\x83\x81a2gWa2fa_\x0FV[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a2\x96Wa'\x10\x83\x81a2\x8CWa2\x8Ba_\x0FV[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a2\xB9W`d\x83\x81a2\xAFWa2\xAEa_\x0FV[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a2\xC8W`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[a2\xD9a;\x8AV[a3\x0FW`@Q\x7F\xD7\xE6\xBC\xF8\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[a3\x19a2\xD1V[_a3\"a(\x97V[\x90P\x82\x81`\x02\x01\x90\x81a35\x91\x90ab:V[P\x81\x81`\x03\x01\x90\x81a3G\x91\x90ab:V[P_\x80\x1B\x81_\x01\x81\x90UP_\x80\x1B\x81`\x01\x01\x81\x90UPPPPV[a3ja2\xD1V[_a3sa&\xB6V[\x90P_\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPPV[a3\x9Aa\x0F/V[a3\xD0W`@Q\x7F\x8D\xFC +\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_3\x90P\x90V[_a4\x05\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba;\xA8V[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a45\x82a;\xB1V[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a4\x91Wa4\x8B\x82\x82a=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a7\x9F\x91\x90aK\xBFV[a7\xE0W\x80`@Q\x7FC1\xA8]\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\x81R`\x04\x01a7\xD7\x91\x90aGrV[`@Q\x80\x91\x03\x90\xFD[PV[s\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC6R\x8Fi\x83\x83`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a82\x92\x91\x90a](V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a8MW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a8q\x91\x90aK\xBFV[a8\xB4W\x81\x81`@Q\x7F\x16\n+K\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\x81R`\x04\x01a8\xAB\x92\x91\x90a](V[`@Q\x80\x91\x03\x90\xFD[PPV[_\x80`@Q\x80`\xC0\x01`@R\x80`\x87\x81R` \x01ae\xE7`\x87\x919\x80Q\x90` \x01 \x84_\x01Q\x80Q\x90` \x01 \x85` \x01Q`@Q` \x01a8\xFA\x91\x90ad\x1CV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x86`@\x01Q\x87``\x01Q\x88`\x80\x01Q`@Q` \x01a9/\x91\x90a^VV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a9Z\x96\x95\x94\x93\x92\x91\x90ad2V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90Pa9|\x83\x82a=6V[\x91PP\x92\x91PPV[_a9\x8Ea=\xAAV[\x90P\x90V[_`@Q\x7F\x19\x01\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\x81R\x83`\x02\x82\x01R\x82`\"\x82\x01R`B\x81 \x91PP\x92\x91PPV[_\x80_`A\x84Q\x03a:\x13W_\x80_` \x87\x01Q\x92P`@\x87\x01Q\x91P``\x87\x01Q_\x1A\x90Pa:\x05\x88\x82\x85\x85a>\rV[\x95P\x95P\x95PPPPa:!V[_`\x02\x85Q_\x1B\x92P\x92P\x92P[\x92P\x92P\x92V[_`\x03\x81\x11\x15a:;Wa::aK\xEAV[[\x82`\x03\x81\x11\x15a:NWa:MaK\xEAV[[\x03\x15a;\x86W`\x01`\x03\x81\x11\x15a:hWa:gaK\xEAV[[\x82`\x03\x81\x11\x15a:{Wa:zaK\xEAV[[\x03a:\xB2W`@Q\x7F\xF6E\xEE\xDF\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02`\x03\x81\x11\x15a:\xC6Wa:\xC5aK\xEAV[[\x82`\x03\x81\x11\x15a:\xD9Wa:\xD8aK\xEAV[[\x03a;\x1DW\x80_\x1C`@Q\x7F\xFC\xE6\x98\xF7\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\x81R`\x04\x01a;\x14\x91\x90aL\x17V[`@Q\x80\x91\x03\x90\xFD[`\x03\x80\x81\x11\x15a;0Wa;/aK\xEAV[[\x82`\x03\x81\x11\x15a;CWa;BaK\xEAV[[\x03a;\x85W\x80`@Q\x7F\xD7\x8B\xCE\x0C\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\x81R`\x04\x01a;|\x91\x90aGrV[`@Q\x80\x91\x03\x90\xFD[[PPV[_a;\x93a\"{V[_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x90P\x90V[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a<\x0CW\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a<\x03\x91\x90aK|V[`@Q\x80\x91\x03\x90\xFD[\x80a<8\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba;\xA8V[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa<\xA3\x91\x90a^VV[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a<\xDBW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a<\xE0V[``\x91P[P\x91P\x91Pa<\xF0\x85\x83\x83a>\xF4V[\x92PPP\x92\x91PPV[_4\x11\x15a=4W`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x80\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0Fa=aa?\x81V[a=ia?\xF7V[\x860`@Q` \x01a=\x7F\x95\x94\x93\x92\x91\x90ad\x91V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90Pa=\xA1\x81\x84a9\x93V[\x91PP\x92\x91PPV[_\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0Fa=\xD4a?\x81V[a=\xDCa?\xF7V[F0`@Q` \x01a=\xF2\x95\x94\x93\x92\x91\x90ad\x91V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x90V[_\x80_\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF]WnsW\xA4P\x1D\xDF\xE9/Fh\x1B \xA0\x84_\x1C\x11\x15a>IW_`\x03\x85\x92P\x92P\x92Pa>\xEAV[_`\x01\x88\x88\x88\x88`@Q_\x81R` \x01`@R`@Qa>l\x94\x93\x92\x91\x90ad\xE2V[` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a>\x8CW=_\x80>=_\xFD[PPP` `@Q\x03Q\x90P_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x03a>\xDDW_`\x01_\x80\x1B\x93P\x93P\x93PPa>\xEAV[\x80_\x80_\x1B\x93P\x93P\x93PP[\x94P\x94P\x94\x91PPV[``\x82a?\tWa?\x04\x82a@nV[a?yV[_\x82Q\x14\x80\x15a?/WP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a?qW\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a?h\x91\x90aK|V[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa?zV[[\x93\x92PPPV[_\x80a?\x8Ba(\x97V[\x90P_a?\x96a(\xBEV[\x90P_\x81Q\x11\x15a?\xB2W\x80\x80Q\x90` \x01 \x92PPPa?\xF4V[_\x82_\x01T\x90P_\x80\x1B\x81\x14a?\xCDW\x80\x93PPPPa?\xF4V[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x80a@\x01a(\x97V[\x90P_a@\x0Ca)\\V[\x90P_\x81Q\x11\x15a@(W\x80\x80Q\x90` \x01 \x92PPPa@kV[_\x82`\x01\x01T\x90P_\x80\x1B\x81\x14a@DW\x80\x93PPPPa@kV[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x81Q\x11\x15a@\x80W\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x82\x80T\x82\x82U\x90_R` _ \x90\x81\x01\x92\x82\x15a@\xECW\x91` \x02\x82\x01[\x82\x81\x11\x15a@\xEBW\x825\x82U\x91` \x01\x91\x90`\x01\x01\x90a@\xD0V[[P\x90Pa@\xF9\x91\x90aAHV[P\x90V[\x82\x80T\x82\x82U\x90_R` _ \x90\x81\x01\x92\x82\x15aA7W\x91` \x02\x82\x01[\x82\x81\x11\x15aA6W\x82Q\x82U\x91` \x01\x91\x90`\x01\x01\x90aA\x1BV[[P\x90PaAD\x91\x90aAHV[P\x90V[[\x80\x82\x11\x15aA_W_\x81_\x90UP`\x01\x01aAIV[P\x90V[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[aA\x86\x81aAtV[\x81\x14aA\x90W_\x80\xFD[PV[_\x815\x90PaA\xA1\x81aA}V[\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12aA\xC8WaA\xC7aA\xA7V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aA\xE5WaA\xE4aA\xABV[[` \x83\x01\x91P\x83`\x01\x82\x02\x83\x01\x11\x15aB\x01WaB\0aA\xAFV[[\x92P\x92\x90PV[_\x80_\x80_\x80_`\x80\x88\x8A\x03\x12\x15aB#WaB\"aAlV[[_aB0\x8A\x82\x8B\x01aA\x93V[\x97PP` \x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aBQWaBPaApV[[aB]\x8A\x82\x8B\x01aA\xB3V[\x96P\x96PP`@\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aB\x80WaB\x7FaApV[[aB\x8C\x8A\x82\x8B\x01aA\xB3V[\x94P\x94PP``\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aB\xAFWaB\xAEaApV[[aB\xBB\x8A\x82\x8B\x01aA\xB3V[\x92P\x92PP\x92\x95\x98\x91\x94\x97P\x92\x95PV[_` \x82\x84\x03\x12\x15aB\xE1WaB\xE0aAlV[[_aB\xEE\x84\x82\x85\x01aA\x93V[\x91PP\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_aCI\x82aC V[\x90P\x91\x90PV[aCY\x81aC?V[\x82RPPV[_aCj\x83\x83aCPV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aC\x8C\x82aB\xF7V[aC\x96\x81\x85aC\x01V[\x93PaC\xA1\x83aC\x11V[\x80_[\x83\x81\x10\x15aC\xD1W\x81QaC\xB8\x88\x82aC_V[\x97PaC\xC3\x83aCvV[\x92PP`\x01\x81\x01\x90PaC\xA4V[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01RaC\xF6\x81\x84aC\x82V[\x90P\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15aD5W\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90PaD\x1AV[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_aDZ\x82aC\xFEV[aDd\x81\x85aD\x08V[\x93PaDt\x81\x85` \x86\x01aD\x18V[aD}\x81aD@V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01RaD\xA0\x81\x84aDPV[\x90P\x92\x91PPV[_\x80\x83`\x1F\x84\x01\x12aD\xBDWaD\xBCaA\xA7V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aD\xDAWaD\xD9aA\xABV[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15aD\xF6WaD\xF5aA\xAFV[[\x92P\x92\x90PV[_\x80_\x80`@\x85\x87\x03\x12\x15aE\x15WaE\x14aAlV[[_\x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aE2WaE1aApV[[aE>\x87\x82\x88\x01aD\xA8V[\x94P\x94PP` \x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aEaWaE`aApV[[aEm\x87\x82\x88\x01aA\xB3V[\x92P\x92PP\x92\x95\x91\x94P\x92PV[_\x81\x15\x15\x90P\x91\x90PV[aE\x8F\x81aE{V[\x82RPPV[_` \x82\x01\x90PaE\xA8_\x83\x01\x84aE\x86V[\x92\x91PPV[aE\xB7\x81aC?V[\x81\x14aE\xC1W_\x80\xFD[PV[_\x815\x90PaE\xD2\x81aE\xAEV[\x92\x91PPV[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[aF\x12\x82aD@V[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15aF1WaF0aE\xDCV[[\x80`@RPPPV[_aFCaAcV[\x90PaFO\x82\x82aF\tV[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aFnWaFmaE\xDCV[[aFw\x82aD@V[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_aF\xA4aF\x9F\x84aFTV[aF:V[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15aF\xC0WaF\xBFaE\xD8V[[aF\xCB\x84\x82\x85aF\x84V[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12aF\xE7WaF\xE6aA\xA7V[[\x815aF\xF7\x84\x82` \x86\x01aF\x92V[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15aG\x16WaG\x15aAlV[[_aG#\x85\x82\x86\x01aE\xC4V[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aGDWaGCaApV[[aGP\x85\x82\x86\x01aF\xD3V[\x91PP\x92P\x92\x90PV[_\x81\x90P\x91\x90PV[aGl\x81aGZV[\x82RPPV[_` \x82\x01\x90PaG\x85_\x83\x01\x84aGcV[\x92\x91PPV[_\x7F\xFF\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\x82\x16\x90P\x91\x90PV[aG\xBF\x81aG\x8BV[\x82RPPV[aG\xCE\x81aAtV[\x82RPPV[aG\xDD\x81aC?V[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[aH\x15\x81aAtV[\x82RPPV[_aH&\x83\x83aH\x0CV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aHH\x82aG\xE3V[aHR\x81\x85aG\xEDV[\x93PaH]\x83aG\xFDV[\x80_[\x83\x81\x10\x15aH\x8DW\x81QaHt\x88\x82aH\x1BV[\x97PaH\x7F\x83aH2V[\x92PP`\x01\x81\x01\x90PaH`V[P\x85\x93PPPP\x92\x91PPV[_`\xE0\x82\x01\x90PaH\xAD_\x83\x01\x8AaG\xB6V[\x81\x81\x03` \x83\x01RaH\xBF\x81\x89aDPV[\x90P\x81\x81\x03`@\x83\x01RaH\xD3\x81\x88aDPV[\x90PaH\xE2``\x83\x01\x87aG\xC5V[aH\xEF`\x80\x83\x01\x86aG\xD4V[aH\xFC`\xA0\x83\x01\x85aGcV[\x81\x81\x03`\xC0\x83\x01RaI\x0E\x81\x84aH>V[\x90P\x98\x97PPPPPPPPV[_\x80\x83`\x1F\x84\x01\x12aI1WaI0aA\xA7V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aINWaIMaA\xABV[[` \x83\x01\x91P\x83`@\x82\x02\x83\x01\x11\x15aIjWaIiaA\xAFV[[\x92P\x92\x90PV[_\x80\xFD[_`@\x82\x84\x03\x12\x15aI\x8AWaI\x89aIqV[[\x81\x90P\x92\x91PPV[_`@\x82\x84\x03\x12\x15aI\xA8WaI\xA7aIqV[[\x81\x90P\x92\x91PPV[_\x80_\x80_\x80_\x80_\x80_a\x01\0\x8C\x8E\x03\x12\x15aI\xD1WaI\xD0aAlV[[_\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aI\xEEWaI\xEDaApV[[aI\xFA\x8E\x82\x8F\x01aI\x1CV[\x9BP\x9BPP` aJ\r\x8E\x82\x8F\x01aIuV[\x99PP``\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aJ.WaJ-aApV[[aJ:\x8E\x82\x8F\x01aI\x93V[\x98PP`\x80aJK\x8E\x82\x8F\x01aE\xC4V[\x97PP`\xA0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aJlWaJkaApV[[aJx\x8E\x82\x8F\x01aA\xB3V[\x96P\x96PP`\xC0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aJ\x9BWaJ\x9AaApV[[aJ\xA7\x8E\x82\x8F\x01aA\xB3V[\x94P\x94PP`\xE0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aJ\xCAWaJ\xC9aApV[[aJ\xD6\x8E\x82\x8F\x01aA\xB3V[\x92P\x92PP\x92\x95\x98\x9BP\x92\x95\x98\x9B\x90\x93\x96\x99PV[_\x80_\x80_``\x86\x88\x03\x12\x15aK\x04WaK\x03aAlV[[_aK\x11\x88\x82\x89\x01aE\xC4V[\x95PP` \x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aK2WaK1aApV[[aK>\x88\x82\x89\x01aI\x1CV[\x94P\x94PP`@\x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aKaWaK`aApV[[aKm\x88\x82\x89\x01aA\xB3V[\x92P\x92PP\x92\x95P\x92\x95\x90\x93PV[_` \x82\x01\x90PaK\x8F_\x83\x01\x84aG\xD4V[\x92\x91PPV[aK\x9E\x81aE{V[\x81\x14aK\xA8W_\x80\xFD[PV[_\x81Q\x90PaK\xB9\x81aK\x95V[\x92\x91PPV[_` \x82\x84\x03\x12\x15aK\xD4WaK\xD3aAlV[[_aK\xE1\x84\x82\x85\x01aK\xABV[\x91PP\x92\x91PPV[\x7FNH{q\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_R`!`\x04R`$_\xFD[_` \x82\x01\x90PaL*_\x83\x01\x84aG\xC5V[\x92\x91PPV[\x7FNH{q\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_R`\"`\x04R`$_\xFD[_`\x02\x82\x04\x90P`\x01\x82\x16\x80aLtW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03aL\x87WaL\x86aL0V[[P\x91\x90PV[\x7FNH{q\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_R`\x11`\x04R`$_\xFD[_aL\xC4\x82aAtV[\x91PaL\xCF\x83aAtV[\x92P\x82\x82\x03\x90P\x81\x81\x11\x15aL\xE7WaL\xE6aL\x8DV[[\x92\x91PPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_aM\x08\x83\x85aL\xEDV[\x93PaM\x15\x83\x85\x84aF\x84V[aM\x1E\x83aD@V[\x84\x01\x90P\x93\x92PPPV[_`\x80\x82\x01\x90PaM<_\x83\x01\x8AaG\xC5V[\x81\x81\x03` \x83\x01RaMO\x81\x88\x8AaL\xFDV[\x90P\x81\x81\x03`@\x83\x01RaMd\x81\x86\x88aL\xFDV[\x90P\x81\x81\x03``\x83\x01RaMy\x81\x84\x86aL\xFDV[\x90P\x98\x97PPPPPPPPV[_\x81\x90P\x92\x91PPV[_aM\x9B\x82aC\xFEV[aM\xA5\x81\x85aM\x87V[\x93PaM\xB5\x81\x85` \x86\x01aD\x18V[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_aM\xF5`\x02\x83aM\x87V[\x91PaN\0\x82aM\xC1V[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_aN?`\x01\x83aM\x87V[\x91PaNJ\x82aN\x0BV[`\x01\x82\x01\x90P\x91\x90PV[_aN`\x82\x87aM\x91V[\x91PaNk\x82aM\xE9V[\x91PaNw\x82\x86aM\x91V[\x91PaN\x82\x82aN3V[\x91PaN\x8E\x82\x85aM\x91V[\x91PaN\x99\x82aN3V[\x91PaN\xA5\x82\x84aM\x91V[\x91P\x81\x90P\x95\x94PPPPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[aN\xCF\x81aN\xB3V[\x82RPPV[_` \x82\x01\x90PaN\xE8_\x83\x01\x84aN\xC6V[\x92\x91PPV[_\x81Q\x90PaN\xFC\x81aE\xAEV[\x92\x91PPV[_` \x82\x84\x03\x12\x15aO\x17WaO\x16aAlV[[_aO$\x84\x82\x85\x01aN\xEEV[\x91PP\x92\x91PPV[\x7FNH{q\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_R`2`\x04R`$_\xFD[_\x82\x90P\x92\x91PPV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_` `\x1F\x83\x01\x04\x90P\x91\x90PV[_\x82\x82\x1B\x90P\x92\x91PPV[_`\x08\x83\x02aO\xC0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82aO\x85V[aO\xCA\x86\x83aO\x85V[\x95P\x80\x19\x84\x16\x93P\x80\x86\x16\x84\x17\x92PPP\x93\x92PPPV[_\x81\x90P\x91\x90PV[_aP\x05aP\0aO\xFB\x84aAtV[aO\xE2V[aAtV[\x90P\x91\x90PV[_\x81\x90P\x91\x90PV[aP\x1E\x83aO\xEBV[aP2aP*\x82aP\x0CV[\x84\x84TaO\x91V[\x82UPPPPV[_\x90V[aPFaP:V[aPQ\x81\x84\x84aP\x15V[PPPV[[\x81\x81\x10\x15aPtWaPi_\x82aP>V[`\x01\x81\x01\x90PaPWV[PPV[`\x1F\x82\x11\x15aP\xB9WaP\x8A\x81aOdV[aP\x93\x84aOvV[\x81\x01` \x85\x10\x15aP\xA2W\x81\x90P[aP\xB6aP\xAE\x85aOvV[\x83\x01\x82aPVV[PP[PPPV[_\x82\x82\x1C\x90P\x92\x91PPV[_aP\xD9_\x19\x84`\x08\x02aP\xBEV[\x19\x80\x83\x16\x91PP\x92\x91PPV[_aP\xF1\x83\x83aP\xCAV[\x91P\x82`\x02\x02\x82\x17\x90P\x92\x91PPV[aQ\x0B\x83\x83aOZV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aQ$WaQ#aE\xDCV[[aQ.\x82TaL]V[aQ9\x82\x82\x85aPxV[_`\x1F\x83\x11`\x01\x81\x14aQfW_\x84\x15aQTW\x82\x87\x015\x90P[aQ^\x85\x82aP\xE6V[\x86UPaQ\xC5V[`\x1F\x19\x84\x16aQt\x86aOdV[_[\x82\x81\x10\x15aQ\x9BW\x84\x89\x015\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90PaQvV[\x86\x83\x10\x15aQ\xB8W\x84\x89\x015aQ\xB4`\x1F\x89\x16\x82aP\xCAV[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPPV[_\x81T\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81TaR\x16\x81aL]V[aR \x81\x86aQ\xFAV[\x94P`\x01\x82\x16_\x81\x14aR:W`\x01\x81\x14aRPWaR\x82V[`\xFF\x19\x83\x16\x86R\x81\x15\x15` \x02\x86\x01\x93PaR\x82V[aRY\x85aOdV[_[\x83\x81\x10\x15aRzW\x81T\x81\x89\x01R`\x01\x82\x01\x91P` \x81\x01\x90PaR[V[\x80\x88\x01\x95PPP[PPP\x92\x91PPV[_aR\x96\x83\x83aR\nV[\x90P\x92\x91PPV[_`\x01\x82\x01\x90P\x91\x90PV[_aR\xB4\x82aQ\xCEV[aR\xBE\x81\x85aQ\xD8V[\x93P\x83` \x82\x02\x85\x01aR\xD0\x85aQ\xE8V[\x80_[\x85\x81\x10\x15aS\nW\x84\x84\x03\x89R\x81aR\xEB\x85\x82aR\x8BV[\x94PaR\xF6\x83aR\x9EV[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90PaR\xD3V[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_``\x82\x01\x90P\x81\x81\x03_\x83\x01RaS5\x81\x87\x89aL\xFDV[\x90P\x81\x81\x03` \x83\x01RaSI\x81\x86aR\xAAV[\x90P\x81\x81\x03`@\x83\x01RaS^\x81\x84\x86aL\xFDV[\x90P\x96\x95PPPPPPV[\x7FEIP712: Uninitialized\0\0\0\0\0\0\0\0\0\0\0_\x82\x01RPV[_aS\x9E`\x15\x83aD\x08V[\x91PaS\xA9\x82aSjV[` \x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01RaS\xCB\x81aS\x92V[\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x80\xFD[\x82\x81\x837PPPV[_aS\xFA\x83\x85aS\xD2V[\x93P\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x15aT-WaT,aS\xE2V[[` \x83\x02\x92PaT>\x83\x85\x84aS\xE6V[\x82\x84\x01\x90P\x93\x92PPPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01RaTc\x81\x84\x86aS\xEFV[\x90P\x93\x92PPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aT\x86WaT\x85aE\xDCV[[` \x82\x02\x90P` \x81\x01\x90P\x91\x90PV[_\x80\xFD[_\x80\xFD[aT\xA8\x81aGZV[\x81\x14aT\xB2W_\x80\xFD[PV[_\x81Q\x90PaT\xC3\x81aT\x9FV[\x92\x91PPV[_\x81Q\x90PaT\xD7\x81aA}V[\x92\x91PPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aT\xF7WaT\xF6aE\xDCV[[` \x82\x02\x90P` \x81\x01\x90P\x91\x90PV[_aU\x1AaU\x15\x84aT\xDDV[aF:V[\x90P\x80\x83\x82R` \x82\x01\x90P` \x84\x02\x83\x01\x85\x81\x11\x15aU=WaUV[\x93\x92PPPV[_`@\x82\x01\x90Paa\xA5_\x83\x01\x85aG\xD4V[\x81\x81\x03` \x83\x01Raa\xB7\x81\x84aC\x82V[\x90P\x93\x92PPPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Raa\xD9\x81\x84\x86aL\xFDV[\x90P\x93\x92PPPV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[`\x1F\x82\x11\x15ab5Wab\x06\x81aa\xE2V[ab\x0F\x84aOvV[\x81\x01` \x85\x10\x15ab\x1EW\x81\x90P[ab2ab*\x85aOvV[\x83\x01\x82aPVV[PP[PPPV[abC\x82aC\xFEV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15ab\\Wab[aE\xDCV[[abf\x82TaL]V[abq\x82\x82\x85aa\xF4V[_` \x90P`\x1F\x83\x11`\x01\x81\x14ab\xA2W_\x84\x15ab\x90W\x82\x87\x01Q\x90P[ab\x9A\x85\x82aP\xE6V[\x86UPac\x01V[`\x1F\x19\x84\x16ab\xB0\x86aa\xE2V[_[\x82\x81\x10\x15ab\xD7W\x84\x89\x01Q\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90Pab\xB2V[\x86\x83\x10\x15ab\xF4W\x84\x89\x01Qab\xF0`\x1F\x89\x16\x82aP\xCAV[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPV[ac\x12\x81aY\xAAV[\x82RPPV[_` \x82\x01\x90Pac+_\x83\x01\x84ac\tV[\x92\x91PPV[`T\x81\x10acBWacAaK\xEAV[[PV[_\x81\x90PacR\x82ac1V[\x91\x90PV[_aca\x82acEV[\x90P\x91\x90PV[acq\x81acWV[\x82RPPV[_` \x82\x01\x90Pac\x8A_\x83\x01\x84achV[\x92\x91PPV[_\x81\x90P\x92\x91PPV[ac\xA3\x81aC?V[\x82RPPV[_ac\xB4\x83\x83ac\x9AV[` \x83\x01\x90P\x92\x91PPV[_ac\xCA\x82aB\xF7V[ac\xD4\x81\x85ac\x90V[\x93Pac\xDF\x83aC\x11V[\x80_[\x83\x81\x10\x15ad\x0FW\x81Qac\xF6\x88\x82ac\xA9V[\x97Pad\x01\x83aCvV[\x92PP`\x01\x81\x01\x90Pac\xE2V[P\x85\x93PPPP\x92\x91PPV[_ad'\x82\x84ac\xC0V[\x91P\x81\x90P\x92\x91PPV[_`\xC0\x82\x01\x90PadE_\x83\x01\x89aGcV[adR` \x83\x01\x88aGcV[ad_`@\x83\x01\x87aGcV[adl``\x83\x01\x86aG\xC5V[ady`\x80\x83\x01\x85aG\xC5V[ad\x86`\xA0\x83\x01\x84aGcV[\x97\x96PPPPPPPV[_`\xA0\x82\x01\x90Pad\xA4_\x83\x01\x88aGcV[ad\xB1` \x83\x01\x87aGcV[ad\xBE`@\x83\x01\x86aGcV[ad\xCB``\x83\x01\x85aG\xC5V[ad\xD8`\x80\x83\x01\x84aG\xD4V[\x96\x95PPPPPPV[_`\x80\x82\x01\x90Pad\xF5_\x83\x01\x87aGcV[ae\x02` \x83\x01\x86ac\tV[ae\x0F`@\x83\x01\x85aGcV[ae\x1C``\x83\x01\x84aGcV[\x95\x94PPPPPV\xFEUserDecryptResponseVerification(bytes publicKey,bytes32[] ctHandles,bytes userDecryptedShare,bytes extraData)PublicDecryptVerification(bytes32[] ctHandles,bytes decryptedResult,bytes extraData)UserDecryptRequestVerification(bytes publicKey,address[] contractAddresses,uint256 startTimestamp,uint256 durationDays,bytes extraData)", ); /// The runtime bytecode of the contract, as deployed on the network. /// /// ```text - ///0x608060405260043610610113575f3560e01c80635c975abb1161009f578063ad3cb1cc11610063578063ad3cb1cc1461034f578063b6e9a9b314610379578063d8998f45146103b5578063f1b57adb146103dd578063fbb832591461040557610113565b80635c975abb1461028f5780636f8913bc146102b95780638456cb59146102e157806384b0196e146102f75780639fad5a2f1461032757610113565b80633f4ba83a116100e65780633f4ba83a146101bb5780634014c4cd146101d15780634f1ef2861461020d57806352d1902d1461022957806358f5b8ab1461025357610113565b8063046f9eb3146101175780630900cc691461013f5780630d8e6e2c1461017b57806339f73810146101a5575b5f80fd5b348015610122575f80fd5b5061013d60048036038101906101389190614d81565b610441565b005b34801561014a575f80fd5b5061016560048036038101906101609190614e45565b6108cf565b6040516101729190614f57565b60405180910390f35b348015610186575f80fd5b5061018f6109a0565b60405161019c9190615001565b60405180910390f35b3480156101b0575f80fd5b506101b9610a1b565b005b3480156101c6575f80fd5b506101cf610c53565b005b3480156101dc575f80fd5b506101f760048036038101906101f29190615076565b610d9b565b604051610204919061510e565b60405180910390f35b61022760048036038101906102229190615279565b610f28565b005b348015610234575f80fd5b5061023d610f47565b60405161024a91906152eb565b60405180910390f35b34801561025e575f80fd5b5061027960048036038101906102749190614e45565b610f78565b604051610286919061510e565b60405180910390f35b34801561029a575f80fd5b506102a3610fac565b6040516102b0919061510e565b60405180910390f35b3480156102c4575f80fd5b506102df60048036038101906102da9190614d81565b610fce565b005b3480156102ec575f80fd5b506102f56113d7565b005b348015610302575f80fd5b5061030b6114fc565b60405161031e9796959493929190615413565b60405180910390f35b348015610332575f80fd5b5061034d60048036038101906103489190615548565b611605565b005b34801561035a575f80fd5b50610363611b57565b6040516103709190615001565b60405180910390f35b348015610384575f80fd5b5061039f600480360381019061039a91906156d8565b611b90565b6040516103ac919061510e565b60405180910390f35b3480156103c0575f80fd5b506103db60048036038101906103d69190615076565b611eae565b005b3480156103e8575f80fd5b5061040360048036038101906103fe91906157af565b61206c565b005b348015610410575f80fd5b5061042b600480360381019061042691906158e9565b61251d565b604051610438919061510e565b60405180910390f35b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b815260040161048e919061597a565b602060405180830381865afa1580156104a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104cd91906159bd565b61050e57336040517faee86323000000000000000000000000000000000000000000000000000000008152600401610505919061597a565b60405180910390fd5b5f61051761278c565b905060f86002600581111561052f5761052e6159e8565b5b901b881115806105425750806009015488115b1561058457876040517fd48af94200000000000000000000000000000000000000000000000000000000815260040161057b9190615a15565b60405180910390fd5b5f816008015f8a81526020019081526020015f206040518060400160405290815f820180546105b290615a5b565b80601f01602080910402602001604051908101604052809291908181526020018280546105de90615a5b565b80156106295780601f1061060057610100808354040283529160200191610629565b820191905f5260205f20905b81548152906001019060200180831161060c57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561067f57602002820191905f5260205f20905b81548152602001906001019080831161066b575b50505050508152505090505f6040518060800160405280835f01518152602001836020015181526020018a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081525090505f610745826127b3565b90506107538b828a8a61287a565b5f846003015f8d81526020019081526020015f205f805f1b81526020019081526020015f2090508033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b7f7fcdfb5381917f554a717d0a5470a33f5a49ba6445f05ec43c74c0bc2cc608b26001838054905061080c9190615ab8565b8d8d8d8d8d8d6040516108259796959493929190615b27565b60405180910390a2846001015f8d81526020019081526020015f205f9054906101000a900460ff16158015610863575061086281805490506129eb565b5b156108c1576001856001015f8e81526020019081526020015f205f6101000a81548160ff0219169083151502179055508b7fe89752be0ecdb68b2a6eb5ef1a891039e0e92ae3c8a62274c5881e48eea1ed2560405160405180910390a25b505050505050505050505050565b60605f6108da61278c565b90505f816004015f8581526020019081526020015f20549050816003015f8581526020019081526020015f205f8281526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561099257602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610949575b505050505092505050919050565b60606040518060400160405280600a81526020017f44656372797074696f6e000000000000000000000000000000000000000000008152506109e15f612a7c565b6109eb6001612a7c565b6109f45f612a7c565b604051602001610a079493929190615c53565b604051602081830303815290604052905090565b6001610a25612b46565b67ffffffffffffffff1614610a66576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f610a71612b6a565b9050805f0160089054906101000a900460ff1680610ab957508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b15610af0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff021916908315150217905550610ba96040518060400160405280600a81526020017f44656372797074696f6e000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250612b91565b610bb1612ba7565b5f610bba61278c565b905060f860016005811115610bd257610bd16159e8565b5b901b816007018190555060f860026005811115610bf257610bf16159e8565b5b901b8160090181905550505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d282604051610c479190615cd3565b60405180910390a15050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd49190615d00565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610d4f575073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610d9157336040517fe19166ee000000000000000000000000000000000000000000000000000000008152600401610d88919061597a565b60405180910390fd5b610d99612bb9565b565b5f805f90505b85859050811015610f1a5773f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff16630620326d878784818110610def57610dee615d2b565b5b905060200201356040518263ffffffff1660e01b8152600401610e1291906152eb565b602060405180830381865afa158015610e2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5191906159bd565b1580610eff575073c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff16632ddc9a6f878784818110610e9b57610e9a615d2b565b5b905060200201356040518263ffffffff1660e01b8152600401610ebe91906152eb565b602060405180830381865afa158015610ed9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610efd91906159bd565b155b15610f0d575f915050610f20565b8080600101915050610da1565b50600190505b949350505050565b610f30612c27565b610f3982612d0d565b610f438282612e00565b5050565b5f610f50612f1e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b5f80610f8261278c565b9050806001015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b5f80610fb6612fa5565b9050805f015f9054906101000a900460ff1691505090565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b815260040161101b919061597a565b602060405180830381865afa158015611036573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105a91906159bd565b61109b57336040517faee86323000000000000000000000000000000000000000000000000000000008152600401611092919061597a565b60405180910390fd5b5f6110a461278c565b905060f8600160058111156110bc576110bb6159e8565b5b901b881115806110cf5750806007015488115b1561111157876040517fd48af9420000000000000000000000000000000000000000000000000000000081526004016111089190615a15565b60405180910390fd5b5f6040518060600160405280836006015f8c81526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561117857602002820191905f5260205f20905b815481526020019060010190808311611164575b5050505050815260200189898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081525090505f61121e82612fcc565b905061122c8a82898961287a565b5f836005015f8c81526020019081526020015f205f8381526020019081526020015f20905080888890918060018154018082558091505060019003905f5260205f20015f90919290919290919290919250918261128a929190615eff565b50836003015f8c81526020019081526020015f205f8381526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836001015f8c81526020019081526020015f205f9054906101000a900460ff1615801561134157506113408180549050613086565b5b156113ca576001846001015f8d81526020019081526020015f205f6101000a81548160ff02191690831515021790555081846004015f8d81526020019081526020015f20819055508a7fd7e58a367a0a6c298e76ad5d240004e327aa1423cbe4bd7ff85d4c715ef8d15f8b8b848a8a6040516113c195949392919061611a565b60405180910390a25b5050505050505050505050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff166346fbf68e336040518263ffffffff1660e01b8152600401611424919061597a565b602060405180830381865afa15801561143f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061146391906159bd565b1580156114b0575073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156114f257336040517f388916bb0000000000000000000000000000000000000000000000000000000081526004016114e9919061597a565b60405180910390fd5b6114fa613117565b565b5f6060805f805f60605f61150e613186565b90505f801b815f015414801561152957505f801b8160010154145b611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f906161b2565b60405180910390fd5b6115706131ad565b61157861324b565b46305f801b5f67ffffffffffffffff81111561159757611596615155565b5b6040519080825280602002602001820160405280156115c55781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b61160d6132e9565b5f87806020019061161e91906161dc565b905003611657576040517f57cfa21700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a60ff1687806020019061166c91906161dc565b905011156116c557600a87806020019061168691906161dc565b90506040517faf1f04950000000000000000000000000000000000000000000000000000000081526004016116bc92919061627a565b60405180910390fd5b6116de898036038101906116d991906162f6565b61332a565b6117478780602001906116f191906161dc565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f82011690508083019250505050505050895f0160208101906117429190616321565b613475565b156117ac57875f01602081019061175e9190616321565b87806020019061176e91906161dc565b6040517fc3446ac70000000000000000000000000000000000000000000000000000000081526004016117a3939291906163d2565b60405180910390fd5b5f6118188c8c8a80602001906117c291906161dc565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508c5f0160208101906118139190616321565b6134f3565b9050611837885f01358a8a806020019061183291906161dc565b6136e6565b5f6040518060c0016040528089898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081526020018a806020019061189c91906161dc565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505081526020018b5f0160208101906118f29190616321565b73ffffffffffffffffffffffffffffffffffffffff1681526020018c5f013581526020018c60200135815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815250905061198b818b60200160208101906119809190616321565b88888d5f01356137c5565b5f73c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff1663a14f8971846040518263ffffffff1660e01b81526004016119d991906164b9565b5f60405180830381865afa1580156119f3573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611a1b9190616746565b9050611a268161389d565b5f611a2f61278c565b9050806009015f815480929190611a459061678d565b91905055505f8160090154905060405180604001604052808c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815260200186815250826008015f8381526020019081526020015f205f820151815f019081611ad091906167de565b506020820151816001019080519060200190611aed929190614c2b565b50905050807ff9011bd6ba0da6049c520d70fe5971f17ed7ab795486052544b51019896c596b848f6020016020810190611b279190616321565b8e8e8c8c604051611b3d96959493929190616a34565b60405180910390a250505050505050505050505050505050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b5f73f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff16632b13591c8a8a88886040518563ffffffff1660e01b8152600401611be49493929190616acd565b602060405180830381865afa158015611bff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c2391906159bd565b611c2f575f9050611ea2565b5f5b87879050811015611e9c5773f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff1663c6528f69898984818110611c7f57611c7e615d2b565b5b9050604002015f01358b5f016020810190611c9a9190616321565b6040518363ffffffff1660e01b8152600401611cb7929190616b0b565b602060405180830381865afa158015611cd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf691906159bd565b1580611dd2575073f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff1663c6528f69898984818110611d4057611d3f615d2b565b5b9050604002015f01358a8a85818110611d5c57611d5b615d2b565b5b9050604002016020016020810190611d749190616321565b6040518363ffffffff1660e01b8152600401611d91929190616b0b565b602060405180830381865afa158015611dac573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dd091906159bd565b155b80611e81575073c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff16632ddc9a6f898984818110611e1b57611e1a615d2b565b5b9050604002015f01356040518263ffffffff1660e01b8152600401611e4091906152eb565b602060405180830381865afa158015611e5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7f91906159bd565b155b15611e8f575f915050611ea2565b8080600101915050611c31565b50600190505b98975050505050505050565b611eb66132e9565b5f8484905003611ef2576040517f2de7543800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f3b8484808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f82011690508083019250505050505050613983565b5f73c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff1663a14f897186866040518363ffffffff1660e01b8152600401611f8b929190616b9a565b5f60405180830381865afa158015611fa5573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611fcd9190616746565b9050611fd88161389d565b5f611fe161278c565b9050806007015f815480929190611ff79061678d565b91905055505f816007015490508686836006015f8481526020019081526020015f209190612026929190614c76565b50807f22db480a39bd72556438aadb4a32a3d2a6638b87c03bbec5fef6997e109587ff84878760405161205b93929190616bbc565b60405180910390a250505050505050565b6120746132e9565b5f88806020019061208591906161dc565b9050036120be576040517f57cfa21700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a60ff168880602001906120d391906161dc565b9050111561212c57600a8880602001906120ed91906161dc565b90506040517faf1f049500000000000000000000000000000000000000000000000000000000815260040161212392919061627a565b60405180910390fd5b6121458980360381019061214091906162f6565b61332a565b61219d88806020019061215891906161dc565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505088613475565b156121f157868880602001906121b391906161dc565b6040517fdc4d78b10000000000000000000000000000000000000000000000000000000081526004016121e8939291906163d2565b60405180910390fd5b5f61224c8c8c8b806020019061220791906161dc565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508b6134f3565b90505f6040518060a0016040528089898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081526020018b80602001906122b391906161dc565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505081526020018c5f013581526020018c60200135815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050508152509050612363818a88888e5f0135613a3b565b5f73c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff1663a14f8971846040518263ffffffff1660e01b81526004016123b191906164b9565b5f60405180830381865afa1580156123cb573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906123f39190616746565b90506123fe8161389d565b5f61240761278c565b9050806009015f81548092919061241d9061678d565b91905055505f8160090154905060405180604001604052808c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815260200186815250826008015f8381526020019081526020015f205f820151815f0190816124a891906167de565b5060208201518160010190805190602001906124c5929190614c2b565b50905050807ff9011bd6ba0da6049c520d70fe5971f17ed7ab795486052544b51019896c596b848e8e8e8c8c60405161250396959493929190616a34565b60405180910390a250505050505050505050505050505050565b5f805f90505b8585905081101561277d5773f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff1663c6528f6987878481811061257157612570615d2b565b5b9050604002015f0135896040518363ffffffff1660e01b8152600401612598929190616b0b565b602060405180830381865afa1580156125b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125d791906159bd565b15806126b3575073f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff1663c6528f6987878481811061262157612620615d2b565b5b9050604002015f013588888581811061263d5761263c615d2b565b5b90506040020160200160208101906126559190616321565b6040518363ffffffff1660e01b8152600401612672929190616b0b565b602060405180830381865afa15801561268d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126b191906159bd565b155b80612762575073c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff16632ddc9a6f8787848181106126fc576126fb615d2b565b5b9050604002015f01356040518263ffffffff1660e01b815260040161272191906152eb565b602060405180830381865afa15801561273c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276091906159bd565b155b15612770575f915050612783565b8080600101915050612523565b50600190505b95945050505050565b5f7f68113e68af494c6efd0210fc4bf9ba748d1ffadaa4718217fdf63548c4aee700905090565b5f6128736040518060a00160405280606d815260200161740c606d913980519060200120835f01518051906020012084602001516040516020016127f79190616c7f565b60405160208183030381529060405280519060200120856040015180519060200120866060015160405160200161282e9190616ccf565b60405160208183030381529060405280519060200120604051602001612858959493929190616ce5565b60405160208183030381529060405280519060200120613b13565b9050919050565b5f61288361278c565b90505f6128d38585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050613b2c565b90506128de81613b56565b816002015f8781526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561297d5785816040517f99ec48d9000000000000000000000000000000000000000000000000000000008152600401612974929190616d36565b60405180910390fd5b6001826002015f8881526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505050505050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663c2b429866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a6e9190616d5d565b905080831015915050919050565b60605f6001612a8a84613c26565b0190505f8167ffffffffffffffff811115612aa857612aa7615155565b5b6040519080825280601f01601f191660200182016040528015612ada5781602001600182028036833780820191505090505b5090505f82602001820190505b600115612b3b578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612b3057612b2f616d88565b5b0494505f8503612ae7575b819350505050919050565b5f612b4f612b6a565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b612b99613d77565b612ba38282613db7565b5050565b612baf613d77565b612bb7613e08565b565b612bc1613e38565b5f612bca612fa5565b90505f815f015f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612c0f613e78565b604051612c1c919061597a565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480612cd457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612cbb613e7f565b73ffffffffffffffffffffffffffffffffffffffff1614155b15612d0b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d8e9190615d00565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612dfd57336040517f0e56cf3d000000000000000000000000000000000000000000000000000000008152600401612df4919061597a565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612e6857506040513d601f19601f82011682018060405250810190612e659190616db5565b60015b612ea957816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401612ea0919061597a565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b8114612f0f57806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401612f0691906152eb565b60405180910390fd5b612f198383613ed2565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614612fa3576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300905090565b5f61307f6040518060800160405280605481526020016174796054913980519060200120835f01516040516020016130049190616c7f565b60405160208183030381529060405280519060200120846020015180519060200120856040015160405160200161303b9190616ccf565b604051602081830303815290604052805190602001206040516020016130649493929190616de0565b60405160208183030381529060405280519060200120613b13565b9050919050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632a3889986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131099190616d5d565b905080831015915050919050565b61311f6132e9565b5f613128612fa5565b90506001815f015f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861316e613e78565b60405161317b919061597a565b60405180910390a150565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f6131b8613186565b90508060020180546131c990615a5b565b80601f01602080910402602001604051908101604052809291908181526020018280546131f590615a5b565b80156132405780601f1061321757610100808354040283529160200191613240565b820191905f5260205f20905b81548152906001019060200180831161322357829003601f168201915b505050505091505090565b60605f613256613186565b905080600301805461326790615a5b565b80601f016020809104026020016040519081016040528092919081815260200182805461329390615a5b565b80156132de5780601f106132b5576101008083540402835291602001916132de565b820191905f5260205f20905b8154815290600101906020018083116132c157829003601f168201915b505050505091505090565b6132f1610fac565b15613328576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f816020015103613367576040517fde2859c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61016d61ffff16816020015111156133be5761016d81602001516040517f329518630000000000000000000000000000000000000000000000000000000081526004016133b5929190616e60565b60405180910390fd5b42815f0151111561340b5742815f01516040517ff24c0887000000000000000000000000000000000000000000000000000000008152600401613402929190616e87565b60405180910390fd5b4262015180826020015161341f9190616eae565b825f015161342d9190616eef565b10156134725742816040517f30348040000000000000000000000000000000000000000000000000000000008152600401613469929190616f4f565b60405180910390fd5b50565b5f805f90505b83518110156134e8578273ffffffffffffffffffffffffffffffffffffffff168482815181106134ae576134ad615d2b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036134db5760019150506134ed565b808060010191505061347b565b505f90505b92915050565b60605f8585905003613531576040517fa6a6cb2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8484905067ffffffffffffffff81111561354e5761354d615155565b5b60405190808252806020026020018201604052801561357c5781602001602082028036833780820191505090505b5090505f805b86869050811015613691575f8787838181106135a1576135a0615d2b565b5b9050604002015f013590505f8888848181106135c0576135bf615d2b565b5b90506040020160200160208101906135d89190616321565b90505f6135e483613f44565b90506135ef81613fce565b61ffff16856135fe9190616eef565b945061360a83886141b9565b61361483836141b9565b61361e8883613475565b6136615781886040517fa4c30391000000000000000000000000000000000000000000000000000000008152600401613658929190616f76565b60405180910390fd5b8286858151811061367557613674615d2b565b5b6020026020010181815250505050508080600101915050613582565b506108008111156136dd57610800816040517fe7f4895d0000000000000000000000000000000000000000000000000000000081526004016136d4929190616e87565b60405180910390fd5b50949350505050565b73f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff16632b13591c858585856040518563ffffffff1660e01b81526004016137399493929190616acd565b602060405180830381865afa158015613754573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061377891906159bd565b6137bf57838383836040517f080a113f0000000000000000000000000000000000000000000000000000000081526004016137b69493929190616acd565b60405180910390fd5b50505050565b5f6137d0868361428e565b90505f6138208286868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050613b2c565b90508573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146138945784846040517f2a873d2700000000000000000000000000000000000000000000000000000000815260040161388b929190616fa4565b60405180910390fd5b50505050505050565b600181511115613980575f815f815181106138bb576138ba615d2b565b5b60200260200101516020015190505f600190505b825181101561397d57818382815181106138ec576138eb615d2b565b5b6020026020010151602001511461397057825f815181106139105761390f615d2b565b5b602002602001015183828151811061392b5761392a615d2b565b5b60200260200101516040517fcfae921f000000000000000000000000000000000000000000000000000000008152600401613967929190617026565b60405180910390fd5b80806001019150506138cf565b50505b50565b5f805b82518110156139eb575f8382815181106139a3576139a2615d2b565b5b602002602001015190505f6139b782613f44565b90506139c281613fce565b61ffff16846139d19190616eef565b93506139dc82614361565b50508080600101915050613986565b50610800811115613a3757610800816040517fe7f4895d000000000000000000000000000000000000000000000000000000008152600401613a2e929190616e87565b60405180910390fd5b5050565b5f613a468683614431565b90505f613a968286868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050613b2c565b90508573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613b0a5784846040517f2a873d27000000000000000000000000000000000000000000000000000000008152600401613b01929190616fa4565b60405180910390fd5b50505050505050565b5f613b25613b1f6144fe565b8361450c565b9050919050565b5f805f80613b3a868661454c565b925092509250613b4a82826145a1565b82935050505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663203d0114826040518263ffffffff1660e01b8152600401613ba3919061597a565b602060405180830381865afa158015613bbe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613be291906159bd565b613c2357806040517f2a7c6ef6000000000000000000000000000000000000000000000000000000008152600401613c1a919061597a565b60405180910390fd5b50565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613c82577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381613c7857613c77616d88565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613cbf576d04ee2d6d415b85acef81000000008381613cb557613cb4616d88565b5b0492506020810190505b662386f26fc100008310613cee57662386f26fc100008381613ce457613ce3616d88565b5b0492506010810190505b6305f5e1008310613d17576305f5e1008381613d0d57613d0c616d88565b5b0492506008810190505b6127108310613d3c576127108381613d3257613d31616d88565b5b0492506004810190505b60648310613d5f5760648381613d5557613d54616d88565b5b0492506002810190505b600a8310613d6e576001810190505b80915050919050565b613d7f614703565b613db5576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b613dbf613d77565b5f613dc8613186565b905082816002019081613ddb91906170b3565b5081816003019081613ded91906170b3565b505f801b815f01819055505f801b8160010181905550505050565b613e10613d77565b5f613e19612fa5565b90505f815f015f6101000a81548160ff02191690831515021790555050565b613e40610fac565b613e76576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f33905090565b5f613eab7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b614721565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b613edb8261472a565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f81511115613f3757613f3182826147f3565b50613f40565b613f3f614873565b5b5050565b5f8060f860f084901b901c5f1c9050605380811115613f6657613f656159e8565b5b60ff168160ff161115613fb057806040517f641950d7000000000000000000000000000000000000000000000000000000008152600401613fa79190617191565b60405180910390fd5b8060ff166053811115613fc657613fc56159e8565b5b915050919050565b5f806053811115613fe257613fe16159e8565b5b826053811115613ff557613ff46159e8565b5b0361400357600290506141b4565b60026053811115614017576140166159e8565b5b82605381111561402a576140296159e8565b5b0361403857600890506141b4565b6003605381111561404c5761404b6159e8565b5b82605381111561405f5761405e6159e8565b5b0361406d57601090506141b4565b60046053811115614081576140806159e8565b5b826053811115614094576140936159e8565b5b036140a257602090506141b4565b600560538111156140b6576140b56159e8565b5b8260538111156140c9576140c86159e8565b5b036140d757604090506141b4565b600660538111156140eb576140ea6159e8565b5b8260538111156140fe576140fd6159e8565b5b0361410c57608090506141b4565b600760538111156141205761411f6159e8565b5b826053811115614133576141326159e8565b5b036141415760a090506141b4565b60086053811115614155576141546159e8565b5b826053811115614168576141676159e8565b5b036141775761010090506141b4565b816040517fbe7830b10000000000000000000000000000000000000000000000000000000081526004016141ab91906171f0565b60405180910390fd5b919050565b73f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff1663c6528f6983836040518363ffffffff1660e01b8152600401614208929190616b0b565b602060405180830381865afa158015614223573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061424791906159bd565b61428a5781816040517f160a2b4b000000000000000000000000000000000000000000000000000000008152600401614281929190616b0b565b60405180910390fd5b5050565b5f806040518060e0016040528060a9815260200161755460a9913980519060200120845f01518051906020012085602001516040516020016142d09190617295565b604051602081830303815290604052805190602001208660400151876060015188608001518960a0015160405160200161430a9190616ccf565b6040516020818303038152906040528051906020012060405160200161433697969594939291906172ab565b60405160208183030381529060405280519060200120905061435883826148af565b91505092915050565b73f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff16630620326d826040518263ffffffff1660e01b81526004016143ae91906152eb565b602060405180830381865afa1580156143c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143ed91906159bd565b61442e57806040517f4331a85d00000000000000000000000000000000000000000000000000000000815260040161442591906152eb565b60405180910390fd5b50565b5f806040518060c00160405280608781526020016174cd6087913980519060200120845f01518051906020012085602001516040516020016144739190617295565b604051602081830303815290604052805190602001208660400151876060015188608001516040516020016144a89190616ccf565b604051602081830303815290604052805190602001206040516020016144d396959493929190617318565b6040516020818303038152906040528051906020012090506144f583826148af565b91505092915050565b5f614507614923565b905090565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f604184510361458c575f805f602087015192506040870151915060608701515f1a905061457e88828585614986565b95509550955050505061459a565b5f600285515f1b9250925092505b9250925092565b5f60038111156145b4576145b36159e8565b5b8260038111156145c7576145c66159e8565b5b03156146ff57600160038111156145e1576145e06159e8565b5b8260038111156145f4576145f36159e8565b5b0361462b576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561463f5761463e6159e8565b5b826003811115614652576146516159e8565b5b0361469657805f1c6040517ffce698f700000000000000000000000000000000000000000000000000000000815260040161468d9190615a15565b60405180910390fd5b6003808111156146a9576146a86159e8565b5b8260038111156146bc576146bb6159e8565b5b036146fe57806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016146f591906152eb565b60405180910390fd5b5b5050565b5f61470c612b6a565b5f0160089054906101000a900460ff16905090565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361478557806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161477c919061597a565b60405180910390fd5b806147b17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b614721565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff168460405161481c9190616ccf565b5f60405180830381855af49150503d805f8114614854576040519150601f19603f3d011682016040523d82523d5f602084013e614859565b606091505b5091509150614869858383614a6d565b9250505092915050565b5f3411156148ad576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f807f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6148da614afa565b6148e2614b70565b86306040516020016148f8959493929190617377565b60405160208183030381529060405280519060200120905061491a818461450c565b91505092915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61494d614afa565b614955614b70565b463060405160200161496b959493929190617377565b60405160208183030381529060405280519060200120905090565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156149c2575f600385925092509250614a63565b5f6001888888886040515f81526020016040526040516149e594939291906173c8565b6020604051602081039080840390855afa158015614a05573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603614a56575f60015f801b93509350935050614a63565b805f805f1b935093509350505b9450945094915050565b606082614a8257614a7d82614be7565b614af2565b5f8251148015614aa857505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15614aea57836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401614ae1919061597a565b60405180910390fd5b819050614af3565b5b9392505050565b5f80614b04613186565b90505f614b0f6131ad565b90505f81511115614b2b57808051906020012092505050614b6d565b5f825f015490505f801b8114614b4657809350505050614b6d565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f80614b7a613186565b90505f614b8561324b565b90505f81511115614ba157808051906020012092505050614be4565b5f826001015490505f801b8114614bbd57809350505050614be4565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f81511115614bf95780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828054828255905f5260205f20908101928215614c65579160200282015b82811115614c64578251825591602001919060010190614c49565b5b509050614c729190614cc1565b5090565b828054828255905f5260205f20908101928215614cb0579160200282015b82811115614caf578235825591602001919060010190614c94565b5b509050614cbd9190614cc1565b5090565b5b80821115614cd8575f815f905550600101614cc2565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b614cff81614ced565b8114614d09575f80fd5b50565b5f81359050614d1a81614cf6565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112614d4157614d40614d20565b5b8235905067ffffffffffffffff811115614d5e57614d5d614d24565b5b602083019150836001820283011115614d7a57614d79614d28565b5b9250929050565b5f805f805f805f6080888a031215614d9c57614d9b614ce5565b5b5f614da98a828b01614d0c565b975050602088013567ffffffffffffffff811115614dca57614dc9614ce9565b5b614dd68a828b01614d2c565b9650965050604088013567ffffffffffffffff811115614df957614df8614ce9565b5b614e058a828b01614d2c565b9450945050606088013567ffffffffffffffff811115614e2857614e27614ce9565b5b614e348a828b01614d2c565b925092505092959891949750929550565b5f60208284031215614e5a57614e59614ce5565b5b5f614e6784828501614d0c565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614ec282614e99565b9050919050565b614ed281614eb8565b82525050565b5f614ee38383614ec9565b60208301905092915050565b5f602082019050919050565b5f614f0582614e70565b614f0f8185614e7a565b9350614f1a83614e8a565b805f5b83811015614f4a578151614f318882614ed8565b9750614f3c83614eef565b925050600181019050614f1d565b5085935050505092915050565b5f6020820190508181035f830152614f6f8184614efb565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614fae578082015181840152602081019050614f93565b5f8484015250505050565b5f601f19601f8301169050919050565b5f614fd382614f77565b614fdd8185614f81565b9350614fed818560208601614f91565b614ff681614fb9565b840191505092915050565b5f6020820190508181035f8301526150198184614fc9565b905092915050565b5f8083601f84011261503657615035614d20565b5b8235905067ffffffffffffffff81111561505357615052614d24565b5b60208301915083602082028301111561506f5761506e614d28565b5b9250929050565b5f805f806040858703121561508e5761508d614ce5565b5b5f85013567ffffffffffffffff8111156150ab576150aa614ce9565b5b6150b787828801615021565b9450945050602085013567ffffffffffffffff8111156150da576150d9614ce9565b5b6150e687828801614d2c565b925092505092959194509250565b5f8115159050919050565b615108816150f4565b82525050565b5f6020820190506151215f8301846150ff565b92915050565b61513081614eb8565b811461513a575f80fd5b50565b5f8135905061514b81615127565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61518b82614fb9565b810181811067ffffffffffffffff821117156151aa576151a9615155565b5b80604052505050565b5f6151bc614cdc565b90506151c88282615182565b919050565b5f67ffffffffffffffff8211156151e7576151e6615155565b5b6151f082614fb9565b9050602081019050919050565b828183375f83830152505050565b5f61521d615218846151cd565b6151b3565b90508281526020810184848401111561523957615238615151565b5b6152448482856151fd565b509392505050565b5f82601f8301126152605761525f614d20565b5b813561527084826020860161520b565b91505092915050565b5f806040838503121561528f5761528e614ce5565b5b5f61529c8582860161513d565b925050602083013567ffffffffffffffff8111156152bd576152bc614ce9565b5b6152c98582860161524c565b9150509250929050565b5f819050919050565b6152e5816152d3565b82525050565b5f6020820190506152fe5f8301846152dc565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b61533881615304565b82525050565b61534781614ced565b82525050565b61535681614eb8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61538e81614ced565b82525050565b5f61539f8383615385565b60208301905092915050565b5f602082019050919050565b5f6153c18261535c565b6153cb8185615366565b93506153d683615376565b805f5b838110156154065781516153ed8882615394565b97506153f8836153ab565b9250506001810190506153d9565b5085935050505092915050565b5f60e0820190506154265f83018a61532f565b81810360208301526154388189614fc9565b9050818103604083015261544c8188614fc9565b905061545b606083018761533e565b615468608083018661534d565b61547560a08301856152dc565b81810360c083015261548781846153b7565b905098975050505050505050565b5f8083601f8401126154aa576154a9614d20565b5b8235905067ffffffffffffffff8111156154c7576154c6614d24565b5b6020830191508360408202830111156154e3576154e2614d28565b5b9250929050565b5f80fd5b5f60408284031215615503576155026154ea565b5b81905092915050565b5f60408284031215615521576155206154ea565b5b81905092915050565b5f6040828403121561553f5761553e6154ea565b5b81905092915050565b5f805f805f805f805f805f6101208c8e03121561556857615567614ce5565b5b5f8c013567ffffffffffffffff81111561558557615584614ce9565b5b6155918e828f01615495565b9b509b505060206155a48e828f016154ee565b99505060606155b58e828f0161550c565b98505060a08c013567ffffffffffffffff8111156155d6576155d5614ce9565b5b6155e28e828f0161552a565b97505060c08c013567ffffffffffffffff81111561560357615602614ce9565b5b61560f8e828f01614d2c565b965096505060e08c013567ffffffffffffffff81111561563257615631614ce9565b5b61563e8e828f01614d2c565b94509450506101008c013567ffffffffffffffff81111561566257615661614ce9565b5b61566e8e828f01614d2c565b92509250509295989b509295989b9093969950565b5f8083601f84011261569857615697614d20565b5b8235905067ffffffffffffffff8111156156b5576156b4614d24565b5b6020830191508360208202830111156156d1576156d0614d28565b5b9250929050565b5f805f805f805f8060c0898b0312156156f4576156f3614ce5565b5b5f6157018b828c01614d0c565b98505060206157128b828c0161550c565b975050606089013567ffffffffffffffff81111561573357615732614ce9565b5b61573f8b828c01615495565b9650965050608089013567ffffffffffffffff81111561576257615761614ce9565b5b61576e8b828c01615683565b945094505060a089013567ffffffffffffffff81111561579157615790614ce9565b5b61579d8b828c01614d2c565b92509250509295985092959890939650565b5f805f805f805f805f805f6101008c8e0312156157cf576157ce614ce5565b5b5f8c013567ffffffffffffffff8111156157ec576157eb614ce9565b5b6157f88e828f01615495565b9b509b5050602061580b8e828f016154ee565b99505060608c013567ffffffffffffffff81111561582c5761582b614ce9565b5b6158388e828f0161552a565b98505060806158498e828f0161513d565b97505060a08c013567ffffffffffffffff81111561586a57615869614ce9565b5b6158768e828f01614d2c565b965096505060c08c013567ffffffffffffffff81111561589957615898614ce9565b5b6158a58e828f01614d2c565b945094505060e08c013567ffffffffffffffff8111156158c8576158c7614ce9565b5b6158d48e828f01614d2c565b92509250509295989b509295989b9093969950565b5f805f805f6060868803121561590257615901614ce5565b5b5f61590f8882890161513d565b955050602086013567ffffffffffffffff8111156159305761592f614ce9565b5b61593c88828901615495565b9450945050604086013567ffffffffffffffff81111561595f5761595e614ce9565b5b61596b88828901614d2c565b92509250509295509295909350565b5f60208201905061598d5f83018461534d565b92915050565b61599c816150f4565b81146159a6575f80fd5b50565b5f815190506159b781615993565b92915050565b5f602082840312156159d2576159d1614ce5565b5b5f6159df848285016159a9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f602082019050615a285f83018461533e565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680615a7257607f821691505b602082108103615a8557615a84615a2e565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f615ac282614ced565b9150615acd83614ced565b9250828203905081811115615ae557615ae4615a8b565b5b92915050565b5f82825260208201905092915050565b5f615b068385615aeb565b9350615b138385846151fd565b615b1c83614fb9565b840190509392505050565b5f608082019050615b3a5f83018a61533e565b8181036020830152615b4d81888a615afb565b90508181036040830152615b62818688615afb565b90508181036060830152615b77818486615afb565b905098975050505050505050565b5f81905092915050565b5f615b9982614f77565b615ba38185615b85565b9350615bb3818560208601614f91565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f615bf3600283615b85565b9150615bfe82615bbf565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f615c3d600183615b85565b9150615c4882615c09565b600182019050919050565b5f615c5e8287615b8f565b9150615c6982615be7565b9150615c758286615b8f565b9150615c8082615c31565b9150615c8c8285615b8f565b9150615c9782615c31565b9150615ca38284615b8f565b915081905095945050505050565b5f67ffffffffffffffff82169050919050565b615ccd81615cb1565b82525050565b5f602082019050615ce65f830184615cc4565b92915050565b5f81519050615cfa81615127565b92915050565b5f60208284031215615d1557615d14614ce5565b5b5f615d2284828501615cec565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82905092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302615dbe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615d83565b615dc88683615d83565b95508019841693508086168417925050509392505050565b5f819050919050565b5f615e03615dfe615df984614ced565b615de0565b614ced565b9050919050565b5f819050919050565b615e1c83615de9565b615e30615e2882615e0a565b848454615d8f565b825550505050565b5f90565b615e44615e38565b615e4f818484615e13565b505050565b5b81811015615e7257615e675f82615e3c565b600181019050615e55565b5050565b601f821115615eb757615e8881615d62565b615e9184615d74565b81016020851015615ea0578190505b615eb4615eac85615d74565b830182615e54565b50505b505050565b5f82821c905092915050565b5f615ed75f1984600802615ebc565b1980831691505092915050565b5f615eef8383615ec8565b9150826002028217905092915050565b615f098383615d58565b67ffffffffffffffff811115615f2257615f21615155565b5b615f2c8254615a5b565b615f37828285615e76565b5f601f831160018114615f64575f8415615f52578287013590505b615f5c8582615ee4565b865550615fc3565b601f198416615f7286615d62565b5f5b82811015615f9957848901358255600182019150602085019450602081019050615f74565b86831015615fb65784890135615fb2601f891682615ec8565b8355505b6001600288020188555050505b50505050505050565b5f81549050919050565b5f82825260208201905092915050565b5f819050815f5260205f209050919050565b5f82825260208201905092915050565b5f815461601481615a5b565b61601e8186615ff8565b9450600182165f8114616038576001811461604e57616080565b60ff198316865281151560200286019350616080565b61605785615d62565b5f5b8381101561607857815481890152600182019150602081019050616059565b808801955050505b50505092915050565b5f6160948383616008565b905092915050565b5f600182019050919050565b5f6160b282615fcc565b6160bc8185615fd6565b9350836020820285016160ce85615fe6565b805f5b85811015616108578484038952816160e98582616089565b94506160f48361609c565b925060208a019950506001810190506160d1565b50829750879550505050505092915050565b5f6060820190508181035f830152616133818789615afb565b9050818103602083015261614781866160a8565b9050818103604083015261615c818486615afb565b90509695505050505050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f61619c601583614f81565b91506161a782616168565b602082019050919050565b5f6020820190508181035f8301526161c981616190565b9050919050565b5f80fd5b5f80fd5b5f80fd5b5f80833560016020038436030381126161f8576161f76161d0565b5b80840192508235915067ffffffffffffffff82111561621a576162196161d4565b5b602083019250602082023603831315616236576162356161d8565b5b509250929050565b5f60ff82169050919050565b5f61626461625f61625a8461623e565b615de0565b614ced565b9050919050565b6162748161624a565b82525050565b5f60408201905061628d5f83018561626b565b61629a602083018461533e565b9392505050565b5f80fd5b5f80fd5b5f604082840312156162be576162bd6162a1565b5b6162c860406151b3565b90505f6162d784828501614d0c565b5f8301525060206162ea84828501614d0c565b60208301525092915050565b5f6040828403121561630b5761630a614ce5565b5b5f616318848285016162a9565b91505092915050565b5f6020828403121561633657616335614ce5565b5b5f6163438482850161513d565b91505092915050565b5f819050919050565b5f616363602084018461513d565b905092915050565b5f602082019050919050565b5f6163828385614e7a565b935061638d8261634c565b805f5b858110156163c5576163a28284616355565b6163ac8882614ed8565b97506163b78361636b565b925050600181019050616390565b5085925050509392505050565b5f6040820190506163e55f83018661534d565b81810360208301526163f8818486616377565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b616434816152d3565b82525050565b5f616445838361642b565b60208301905092915050565b5f602082019050919050565b5f61646782616402565b616471818561640c565b935061647c8361641c565b805f5b838110156164ac578151616493888261643a565b975061649e83616451565b92505060018101905061647f565b5085935050505092915050565b5f6020820190508181035f8301526164d1818461645d565b905092915050565b5f67ffffffffffffffff8211156164f3576164f2615155565b5b602082029050602081019050919050565b61650d816152d3565b8114616517575f80fd5b50565b5f8151905061652881616504565b92915050565b5f8151905061653c81614cf6565b92915050565b5f67ffffffffffffffff82111561655c5761655b615155565b5b602082029050602081019050919050565b5f61657f61657a84616542565b6151b3565b905080838252602082019050602084028301858111156165a2576165a1614d28565b5b835b818110156165cb57806165b78882615cec565b8452602084019350506020810190506165a4565b5050509392505050565b5f82601f8301126165e9576165e8614d20565b5b81516165f984826020860161656d565b91505092915050565b5f60808284031215616617576166166162a1565b5b61662160806151b3565b90505f6166308482850161651a565b5f8301525060206166438482850161652e565b60208301525060406166578482850161651a565b604083015250606082015167ffffffffffffffff81111561667b5761667a6162a5565b5b616687848285016165d5565b60608301525092915050565b5f6166a56166a0846164d9565b6151b3565b905080838252602082019050602084028301858111156166c8576166c7614d28565b5b835b8181101561670f57805167ffffffffffffffff8111156166ed576166ec614d20565b5b8086016166fa8982616602565b855260208501945050506020810190506166ca565b5050509392505050565b5f82601f83011261672d5761672c614d20565b5b815161673d848260208601616693565b91505092915050565b5f6020828403121561675b5761675a614ce5565b5b5f82015167ffffffffffffffff81111561677857616777614ce9565b5b61678484828501616719565b91505092915050565b5f61679782614ced565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036167c9576167c8615a8b565b5b600182019050919050565b5f81519050919050565b6167e7826167d4565b67ffffffffffffffff811115616800576167ff615155565b5b61680a8254615a5b565b616815828285615e76565b5f60209050601f831160018114616846575f8415616834578287015190505b61683e8582615ee4565b8655506168a5565b601f19841661685486615d62565b5f5b8281101561687b57848901518255600182019150602085019450602081019050616856565b868310156168985784890151616894601f891682615ec8565b8355505b6001600288020188555050505b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6168f082614e70565b6168fa81856168d6565b935061690583614e8a565b805f5b8381101561693557815161691c8882614ed8565b975061692783614eef565b925050600181019050616908565b5085935050505092915050565b5f608083015f8301516169575f86018261642b565b50602083015161696a6020860182615385565b50604083015161697d604086018261642b565b506060830151848203606086015261699582826168e6565b9150508091505092915050565b5f6169ad8383616942565b905092915050565b5f602082019050919050565b5f6169cb826168ad565b6169d581856168b7565b9350836020820285016169e7856168c7565b805f5b85811015616a225784840389528151616a0385826169a2565b9450616a0e836169b5565b925060208a019950506001810190506169ea565b50829750879550505050505092915050565b5f6080820190508181035f830152616a4c81896169c1565b9050616a5b602083018861534d565b8181036040830152616a6e818688615afb565b90508181036060830152616a83818486615afb565b9050979650505050505050565b60408201616aa05f830183616355565b616aac5f850182614ec9565b50616aba6020830183616355565b616ac76020850182614ec9565b50505050565b5f608082019050616ae05f83018761533e565b616aed6020830186616a90565b8181036060830152616b00818486616377565b905095945050505050565b5f604082019050616b1e5f8301856152dc565b616b2b602083018461534d565b9392505050565b5f80fd5b82818337505050565b5f616b4a838561640c565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115616b7d57616b7c616b32565b5b602083029250616b8e838584616b36565b82840190509392505050565b5f6020820190508181035f830152616bb3818486616b3f565b90509392505050565b5f6040820190508181035f830152616bd481866169c1565b90508181036020830152616be9818486615afb565b9050949350505050565b5f81905092915050565b616c06816152d3565b82525050565b5f616c178383616bfd565b60208301905092915050565b5f616c2d82616402565b616c378185616bf3565b9350616c428361641c565b805f5b83811015616c72578151616c598882616c0c565b9750616c6483616451565b925050600181019050616c45565b5085935050505092915050565b5f616c8a8284616c23565b915081905092915050565b5f81905092915050565b5f616ca9826167d4565b616cb38185616c95565b9350616cc3818560208601614f91565b80840191505092915050565b5f616cda8284616c9f565b915081905092915050565b5f60a082019050616cf85f8301886152dc565b616d0560208301876152dc565b616d1260408301866152dc565b616d1f60608301856152dc565b616d2c60808301846152dc565b9695505050505050565b5f604082019050616d495f83018561533e565b616d56602083018461534d565b9392505050565b5f60208284031215616d7257616d71614ce5565b5b5f616d7f8482850161652e565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f60208284031215616dca57616dc9614ce5565b5b5f616dd78482850161651a565b91505092915050565b5f608082019050616df35f8301876152dc565b616e0060208301866152dc565b616e0d60408301856152dc565b616e1a60608301846152dc565b95945050505050565b5f61ffff82169050919050565b5f616e4a616e45616e4084616e23565b615de0565b614ced565b9050919050565b616e5a81616e30565b82525050565b5f604082019050616e735f830185616e51565b616e80602083018461533e565b9392505050565b5f604082019050616e9a5f83018561533e565b616ea7602083018461533e565b9392505050565b5f616eb882614ced565b9150616ec383614ced565b9250828202616ed181614ced565b91508282048414831517616ee857616ee7615a8b565b5b5092915050565b5f616ef982614ced565b9150616f0483614ced565b9250828201905080821115616f1c57616f1b615a8b565b5b92915050565b604082015f820151616f365f850182615385565b506020820151616f496020850182615385565b50505050565b5f606082019050616f625f83018561533e565b616f6f6020830184616f22565b9392505050565b5f604082019050616f895f83018561534d565b8181036020830152616f9b8184614efb565b90509392505050565b5f6020820190508181035f830152616fbd818486615afb565b90509392505050565b5f608083015f830151616fdb5f86018261642b565b506020830151616fee6020860182615385565b506040830151617001604086018261642b565b506060830151848203606086015261701982826168e6565b9150508091505092915050565b5f6040820190508181035f83015261703e8185616fc6565b905081810360208301526170528184616fc6565b90509392505050565b5f819050815f5260205f209050919050565b601f8211156170ae5761707f8161705b565b61708884615d74565b81016020851015617097578190505b6170ab6170a385615d74565b830182615e54565b50505b505050565b6170bc82614f77565b67ffffffffffffffff8111156170d5576170d4615155565b5b6170df8254615a5b565b6170ea82828561706d565b5f60209050601f83116001811461711b575f8415617109578287015190505b6171138582615ee4565b86555061717a565b601f1984166171298661705b565b5f5b828110156171505784890151825560018201915060208501945060208101905061712b565b8683101561716d5784890151617169601f891682615ec8565b8355505b6001600288020188555050505b505050505050565b61718b8161623e565b82525050565b5f6020820190506171a45f830184617182565b92915050565b605481106171bb576171ba6159e8565b5b50565b5f8190506171cb826171aa565b919050565b5f6171da826171be565b9050919050565b6171ea816171d0565b82525050565b5f6020820190506172035f8301846171e1565b92915050565b5f81905092915050565b61721c81614eb8565b82525050565b5f61722d8383617213565b60208301905092915050565b5f61724382614e70565b61724d8185617209565b935061725883614e8a565b805f5b8381101561728857815161726f8882617222565b975061727a83614eef565b92505060018101905061725b565b5085935050505092915050565b5f6172a08284617239565b915081905092915050565b5f60e0820190506172be5f83018a6152dc565b6172cb60208301896152dc565b6172d860408301886152dc565b6172e5606083018761534d565b6172f2608083018661533e565b6172ff60a083018561533e565b61730c60c08301846152dc565b98975050505050505050565b5f60c08201905061732b5f8301896152dc565b61733860208301886152dc565b61734560408301876152dc565b617352606083018661533e565b61735f608083018561533e565b61736c60a08301846152dc565b979650505050505050565b5f60a08201905061738a5f8301886152dc565b61739760208301876152dc565b6173a460408301866152dc565b6173b1606083018561533e565b6173be608083018461534d565b9695505050505050565b5f6080820190506173db5f8301876152dc565b6173e86020830186617182565b6173f560408301856152dc565b61740260608301846152dc565b9594505050505056fe5573657244656372797074526573706f6e7365566572696669636174696f6e286279746573207075626c69634b65792c627974657333325b5d20637448616e646c65732c6279746573207573657244656372797074656453686172652c627974657320657874726144617461295075626c696344656372797074566572696669636174696f6e28627974657333325b5d20637448616e646c65732c627974657320646563727970746564526573756c742c62797465732065787472614461746129557365724465637279707452657175657374566572696669636174696f6e286279746573207075626c69634b65792c616464726573735b5d20636f6e74726163744164647265737365732c75696e7432353620737461727454696d657374616d702c75696e74323536206475726174696f6e446179732c6279746573206578747261446174612944656c656761746564557365724465637279707452657175657374566572696669636174696f6e286279746573207075626c69634b65792c616464726573735b5d20636f6e74726163744164647265737365732c616464726573732064656c656761746f72416464726573732c75696e7432353620737461727454696d657374616d702c75696e74323536206475726174696f6e446179732c62797465732065787472614461746129 + ///0x6080604052600436106100fd575f3560e01c806358f5b8ab1161009457806384b0196e1161006357806384b0196e146102e1578063ad3cb1cc14610311578063d8998f451461033b578063f1b57adb14610363578063fbb832591461038b576100fd565b806358f5b8ab1461023d5780635c975abb146102795780636f8913bc146102a35780638456cb59146102cb576100fd565b80633f4ba83a116100d05780633f4ba83a146101a55780634014c4cd146101bb5780634f1ef286146101f757806352d1902d14610213576100fd565b8063046f9eb3146101015780630900cc69146101295780630d8e6e2c1461016557806339f738101461018f575b5f80fd5b34801561010c575f80fd5b5061012760048036038101906101229190614208565b6103c7565b005b348015610134575f80fd5b5061014f600480360381019061014a91906142cc565b610853565b60405161015c91906143de565b60405180910390f35b348015610170575f80fd5b50610179610924565b6040516101869190614488565b60405180910390f35b34801561019a575f80fd5b506101a361099f565b005b3480156101b0575f80fd5b506101b9610bd7565b005b3480156101c6575f80fd5b506101e160048036038101906101dc91906144fd565b610d1f565b6040516101ee9190614595565b60405180910390f35b610211600480360381019061020c9190614700565b610eac565b005b34801561021e575f80fd5b50610227610ecb565b6040516102349190614772565b60405180910390f35b348015610248575f80fd5b50610263600480360381019061025e91906142cc565b610efc565b6040516102709190614595565b60405180910390f35b348015610284575f80fd5b5061028d610f2f565b60405161029a9190614595565b60405180910390f35b3480156102ae575f80fd5b506102c960048036038101906102c49190614208565b610f51565b005b3480156102d6575f80fd5b506102df611358565b005b3480156102ec575f80fd5b506102f561147d565b604051610308979695949392919061489a565b60405180910390f35b34801561031c575f80fd5b50610325611586565b6040516103329190614488565b60405180910390f35b348015610346575f80fd5b50610361600480360381019061035c91906144fd565b6115bf565b005b34801561036e575f80fd5b50610389600480360381019061038491906149b1565b61177d565b005b348015610396575f80fd5b506103b160048036038101906103ac9190614aeb565b611c2e565b6040516103be9190614595565b60405180910390f35b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b81526004016104149190614b7c565b602060405180830381865afa15801561042f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104539190614bbf565b61049457336040517faee8632300000000000000000000000000000000000000000000000000000000815260040161048b9190614b7c565b60405180910390fd5b5f61049d611e9d565b905060f8600260058111156104b5576104b4614bea565b5b901b881115806104c85750806008015488115b1561050a57876040517fd48af9420000000000000000000000000000000000000000000000000000000081526004016105019190614c17565b60405180910390fd5b5f816007015f8a81526020019081526020015f206040518060400160405290815f8201805461053890614c5d565b80601f016020809104026020016040519081016040528092919081815260200182805461056490614c5d565b80156105af5780601f10610586576101008083540402835291602001916105af565b820191905f5260205f20905b81548152906001019060200180831161059257829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561060557602002820191905f5260205f20905b8154815260200190600101908083116105f1575b50505050508152505090505f6040518060800160405280835f01518152602001836020015181526020018a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081525090505f6106cb82611ec4565b90506106d98b828a8a611f8b565b5f846002015f8d81526020019081526020015f205f805f1b81526020019081526020015f2090508033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b7f7fcdfb5381917f554a717d0a5470a33f5a49ba6445f05ec43c74c0bc2cc608b2600183805490506107929190614cba565b8d8d8d8d8d8d6040516107ab9796959493929190614d29565b60405180910390a2845f015f8d81526020019081526020015f205f9054906101000a900460ff161580156107e857506107e781805490506120fc565b5b15610845576001855f015f8e81526020019081526020015f205f6101000a81548160ff0219169083151502179055508b7fe89752be0ecdb68b2a6eb5ef1a891039e0e92ae3c8a62274c5881e48eea1ed2560405160405180910390a25b505050505050505050505050565b60605f61085e611e9d565b90505f816003015f8581526020019081526020015f20549050816002015f8581526020019081526020015f205f8281526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561091657602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116108cd575b505050505092505050919050565b60606040518060400160405280600a81526020017f44656372797074696f6e000000000000000000000000000000000000000000008152506109655f61218d565b61096f600161218d565b6109785f61218d565b60405160200161098b9493929190614e55565b604051602081830303815290604052905090565b60016109a9612257565b67ffffffffffffffff16146109ea576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f6109f561227b565b9050805f0160089054906101000a900460ff1680610a3d57508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b15610a74576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff021916908315150217905550610b2d6040518060400160405280600a81526020017f44656372797074696f6e000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506122a2565b610b356122b8565b5f610b3e611e9d565b905060f860016005811115610b5657610b55614bea565b5b901b816006018190555060f860026005811115610b7657610b75614bea565b5b901b8160080181905550505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d282604051610bcb9190614ed5565b60405180910390a15050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c589190614f02565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610cd3575073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610d1557336040517fe19166ee000000000000000000000000000000000000000000000000000000008152600401610d0c9190614b7c565b60405180910390fd5b610d1d6122ca565b565b5f805f90505b85859050811015610e9e5773f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff16630620326d878784818110610d7357610d72614f2d565b5b905060200201356040518263ffffffff1660e01b8152600401610d969190614772565b602060405180830381865afa158015610db1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd59190614bbf565b1580610e83575073c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff16632ddc9a6f878784818110610e1f57610e1e614f2d565b5b905060200201356040518263ffffffff1660e01b8152600401610e429190614772565b602060405180830381865afa158015610e5d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e819190614bbf565b155b15610e91575f915050610ea4565b8080600101915050610d25565b50600190505b949350505050565b610eb4612338565b610ebd8261241e565b610ec78282612511565b5050565b5f610ed461262f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b5f80610f06611e9d565b9050805f015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b5f80610f396126b6565b9050805f015f9054906101000a900460ff1691505090565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b8152600401610f9e9190614b7c565b602060405180830381865afa158015610fb9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fdd9190614bbf565b61101e57336040517faee863230000000000000000000000000000000000000000000000000000000081526004016110159190614b7c565b60405180910390fd5b5f611027611e9d565b905060f86001600581111561103f5761103e614bea565b5b901b881115806110525750806006015488115b1561109457876040517fd48af94200000000000000000000000000000000000000000000000000000000815260040161108b9190614c17565b60405180910390fd5b5f6040518060600160405280836005015f8c81526020019081526020015f208054806020026020016040519081016040528092919081815260200182805480156110fb57602002820191905f5260205f20905b8154815260200190600101908083116110e7575b5050505050815260200189898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081525090505f6111a1826126dd565b90506111af8a828989611f8b565b5f836004015f8c81526020019081526020015f205f8381526020019081526020015f20905080888890918060018154018082558091505060019003905f5260205f20015f90919290919290919290919250918261120d929190615101565b50836002015f8c81526020019081526020015f205f8381526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550835f015f8c81526020019081526020015f205f9054906101000a900460ff161580156112c357506112c28180549050612797565b5b1561134b576001845f015f8d81526020019081526020015f205f6101000a81548160ff02191690831515021790555081846003015f8d81526020019081526020015f20819055508a7fd7e58a367a0a6c298e76ad5d240004e327aa1423cbe4bd7ff85d4c715ef8d15f8b8b848a8a60405161134295949392919061531c565b60405180910390a25b5050505050505050505050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff166346fbf68e336040518263ffffffff1660e01b81526004016113a59190614b7c565b602060405180830381865afa1580156113c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e49190614bbf565b158015611431575073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561147357336040517f388916bb00000000000000000000000000000000000000000000000000000000815260040161146a9190614b7c565b60405180910390fd5b61147b612828565b565b5f6060805f805f60605f61148f612897565b90505f801b815f01541480156114aa57505f801b8160010154145b6114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e0906153b4565b60405180910390fd5b6114f16128be565b6114f961295c565b46305f801b5f67ffffffffffffffff811115611518576115176145dc565b5b6040519080825280602002602001820160405280156115465781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6115c76129fa565b5f8484905003611603576040517f2de7543800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61164c8484808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f82011690508083019250505050505050612a3b565b5f73c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff1663a14f897186866040518363ffffffff1660e01b815260040161169c92919061544a565b5f60405180830381865afa1580156116b6573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906116de91906156e1565b90506116e981612af3565b5f6116f2611e9d565b9050806006015f81548092919061170890615728565b91905055505f816006015490508686836005015f8481526020019081526020015f2091906117379291906140b2565b50807f22db480a39bd72556438aadb4a32a3d2a6638b87c03bbec5fef6997e109587ff84878760405161176c93929190615905565b60405180910390a250505050505050565b6117856129fa565b5f8880602001906117969190615948565b9050036117cf576040517f57cfa21700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a60ff168880602001906117e49190615948565b9050111561183d57600a8880602001906117fe9190615948565b90506040517faf1f04950000000000000000000000000000000000000000000000000000000081526004016118349291906159e6565b60405180910390fd5b611856898036038101906118519190615a5a565b612bd9565b6118ae8880602001906118699190615948565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505088612d24565b1561190257868880602001906118c49190615948565b6040517fdc4d78b10000000000000000000000000000000000000000000000000000000081526004016118f993929190615b0b565b60405180910390fd5b5f61195d8c8c8b80602001906119189190615948565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508b612da2565b90505f6040518060a0016040528089898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081526020018b80602001906119c49190615948565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505081526020018c5f013581526020018c60200135815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050508152509050611a74818a88888e5f0135612f95565b5f73c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff1663a14f8971846040518263ffffffff1660e01b8152600401611ac29190615bd3565b5f60405180830381865afa158015611adc573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611b0491906156e1565b9050611b0f81612af3565b5f611b18611e9d565b9050806008015f815480929190611b2e90615728565b91905055505f8160080154905060405180604001604052808c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815260200186815250826007015f8381526020019081526020015f205f820151815f019081611bb99190615bfd565b506020820151816001019080519060200190611bd69291906140fd565b50905050807ff9011bd6ba0da6049c520d70fe5971f17ed7ab795486052544b51019896c596b848e8e8e8c8c604051611c1496959493929190615ccc565b60405180910390a250505050505050505050505050505050565b5f805f90505b85859050811015611e8e5773f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff1663c6528f69878784818110611c8257611c81614f2d565b5b9050604002015f0135896040518363ffffffff1660e01b8152600401611ca9929190615d28565b602060405180830381865afa158015611cc4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ce89190614bbf565b1580611dc4575073f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff1663c6528f69878784818110611d3257611d31614f2d565b5b9050604002015f0135888885818110611d4e57611d4d614f2d565b5b9050604002016020016020810190611d669190615d4f565b6040518363ffffffff1660e01b8152600401611d83929190615d28565b602060405180830381865afa158015611d9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc29190614bbf565b155b80611e73575073c7d45661a345ec5ca0e8521cfef7e32fda0daa6873ffffffffffffffffffffffffffffffffffffffff16632ddc9a6f878784818110611e0d57611e0c614f2d565b5b9050604002015f01356040518263ffffffff1660e01b8152600401611e329190614772565b602060405180830381865afa158015611e4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e719190614bbf565b155b15611e81575f915050611e94565b8080600101915050611c34565b50600190505b95945050505050565b5f7f68113e68af494c6efd0210fc4bf9ba748d1ffadaa4718217fdf63548c4aee700905090565b5f611f846040518060a00160405280606d8152602001616526606d913980519060200120835f0151805190602001208460200151604051602001611f089190615e06565b604051602081830303815290604052805190602001208560400151805190602001208660600151604051602001611f3f9190615e56565b60405160208183030381529060405280519060200120604051602001611f69959493929190615e6c565b6040516020818303038152906040528051906020012061306d565b9050919050565b5f611f94611e9d565b90505f611fe48585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050613086565b9050611fef816130b0565b816001015f8781526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561208e5785816040517f99ec48d9000000000000000000000000000000000000000000000000000000008152600401612085929190615ebd565b60405180910390fd5b6001826001015f8881526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505050505050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663c2b429866040518163ffffffff1660e01b8152600401602060405180830381865afa15801561215b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061217f9190615ee4565b905080831015915050919050565b60605f600161219b84613180565b0190505f8167ffffffffffffffff8111156121b9576121b86145dc565b5b6040519080825280601f01601f1916602001820160405280156121eb5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561224c578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161224157612240615f0f565b5b0494505f85036121f8575b819350505050919050565b5f61226061227b565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6122aa6132d1565b6122b48282613311565b5050565b6122c06132d1565b6122c8613362565b565b6122d2613392565b5f6122db6126b6565b90505f815f015f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6123206133d2565b60405161232d9190614b7c565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614806123e557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166123cc6133d9565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561241c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561247b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249f9190614f02565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461250e57336040517f0e56cf3d0000000000000000000000000000000000000000000000000000000081526004016125059190614b7c565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561257957506040513d601f19601f820116820180604052508101906125769190615f3c565b60015b6125ba57816040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016125b19190614b7c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461262057806040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004016126179190614772565b60405180910390fd5b61262a838361342c565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146126b4576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300905090565b5f6127906040518060800160405280605481526020016165936054913980519060200120835f01516040516020016127159190615e06565b60405160208183030381529060405280519060200120846020015180519060200120856040015160405160200161274c9190615e56565b604051602081830303815290604052805190602001206040516020016127759493929190615f67565b6040516020818303038152906040528051906020012061306d565b9050919050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632a3889986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061281a9190615ee4565b905080831015915050919050565b6128306129fa565b5f6128396126b6565b90506001815f015f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861287f6133d2565b60405161288c9190614b7c565b60405180910390a150565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f6128c9612897565b90508060020180546128da90614c5d565b80601f016020809104026020016040519081016040528092919081815260200182805461290690614c5d565b80156129515780601f1061292857610100808354040283529160200191612951565b820191905f5260205f20905b81548152906001019060200180831161293457829003601f168201915b505050505091505090565b60605f612967612897565b905080600301805461297890614c5d565b80601f01602080910402602001604051908101604052809291908181526020018280546129a490614c5d565b80156129ef5780601f106129c6576101008083540402835291602001916129ef565b820191905f5260205f20905b8154815290600101906020018083116129d257829003601f168201915b505050505091505090565b612a02610f2f565b15612a39576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f805b8251811015612aa3575f838281518110612a5b57612a5a614f2d565b5b602002602001015190505f612a6f8261349e565b9050612a7a81613528565b61ffff1684612a899190615faa565b9350612a9482613713565b50508080600101915050612a3e565b50610800811115612aef57610800816040517fe7f4895d000000000000000000000000000000000000000000000000000000008152600401612ae6929190615fdd565b60405180910390fd5b5050565b600181511115612bd6575f815f81518110612b1157612b10614f2d565b5b60200260200101516020015190505f600190505b8251811015612bd35781838281518110612b4257612b41614f2d565b5b60200260200101516020015114612bc657825f81518110612b6657612b65614f2d565b5b6020026020010151838281518110612b8157612b80614f2d565b5b60200260200101516040517fcfae921f000000000000000000000000000000000000000000000000000000008152600401612bbd929190616064565b60405180910390fd5b8080600101915050612b25565b50505b50565b5f816020015103612c16576040517fde2859c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61016d61ffff1681602001511115612c6d5761016d81602001516040517f32951863000000000000000000000000000000000000000000000000000000008152600401612c649291906160d6565b60405180910390fd5b42815f01511115612cba5742815f01516040517ff24c0887000000000000000000000000000000000000000000000000000000008152600401612cb1929190615fdd565b60405180910390fd5b42620151808260200151612cce91906160fd565b825f0151612cdc9190615faa565b1015612d215742816040517f30348040000000000000000000000000000000000000000000000000000000008152600401612d1892919061616b565b60405180910390fd5b50565b5f805f90505b8351811015612d97578273ffffffffffffffffffffffffffffffffffffffff16848281518110612d5d57612d5c614f2d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603612d8a576001915050612d9c565b8080600101915050612d2a565b505f90505b92915050565b60605f8585905003612de0576040517fa6a6cb2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8484905067ffffffffffffffff811115612dfd57612dfc6145dc565b5b604051908082528060200260200182016040528015612e2b5781602001602082028036833780820191505090505b5090505f805b86869050811015612f40575f878783818110612e5057612e4f614f2d565b5b9050604002015f013590505f888884818110612e6f57612e6e614f2d565b5b9050604002016020016020810190612e879190615d4f565b90505f612e938361349e565b9050612e9e81613528565b61ffff1685612ead9190615faa565b9450612eb983886137e3565b612ec383836137e3565b612ecd8883612d24565b612f105781886040517fa4c30391000000000000000000000000000000000000000000000000000000008152600401612f07929190616192565b60405180910390fd5b82868581518110612f2457612f23614f2d565b5b6020026020010181815250505050508080600101915050612e31565b50610800811115612f8c57610800816040517fe7f4895d000000000000000000000000000000000000000000000000000000008152600401612f83929190615fdd565b60405180910390fd5b50949350505050565b5f612fa086836138b8565b90505f612ff08286868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050613086565b90508573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146130645784846040517f2a873d2700000000000000000000000000000000000000000000000000000000815260040161305b9291906161c0565b60405180910390fd5b50505050505050565b5f61307f613079613985565b83613993565b9050919050565b5f805f8061309486866139d3565b9250925092506130a48282613a28565b82935050505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663203d0114826040518263ffffffff1660e01b81526004016130fd9190614b7c565b602060405180830381865afa158015613118573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061313c9190614bbf565b61317d57806040517f2a7c6ef60000000000000000000000000000000000000000000000000000000081526004016131749190614b7c565b60405180910390fd5b50565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106131dc577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816131d2576131d1615f0f565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613219576d04ee2d6d415b85acef8100000000838161320f5761320e615f0f565b5b0492506020810190505b662386f26fc10000831061324857662386f26fc10000838161323e5761323d615f0f565b5b0492506010810190505b6305f5e1008310613271576305f5e100838161326757613266615f0f565b5b0492506008810190505b612710831061329657612710838161328c5761328b615f0f565b5b0492506004810190505b606483106132b957606483816132af576132ae615f0f565b5b0492506002810190505b600a83106132c8576001810190505b80915050919050565b6132d9613b8a565b61330f576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6133196132d1565b5f613322612897565b905082816002019081613335919061623a565b5081816003019081613347919061623a565b505f801b815f01819055505f801b8160010181905550505050565b61336a6132d1565b5f6133736126b6565b90505f815f015f6101000a81548160ff02191690831515021790555050565b61339a610f2f565b6133d0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f33905090565b5f6134057f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b613ba8565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61343582613bb1565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156134915761348b8282613c7a565b5061349a565b613499613cfa565b5b5050565b5f8060f860f084901b901c5f1c90506053808111156134c0576134bf614bea565b5b60ff168160ff16111561350a57806040517f641950d70000000000000000000000000000000000000000000000000000000081526004016135019190616318565b60405180910390fd5b8060ff1660538111156135205761351f614bea565b5b915050919050565b5f80605381111561353c5761353b614bea565b5b82605381111561354f5761354e614bea565b5b0361355d576002905061370e565b6002605381111561357157613570614bea565b5b82605381111561358457613583614bea565b5b03613592576008905061370e565b600360538111156135a6576135a5614bea565b5b8260538111156135b9576135b8614bea565b5b036135c7576010905061370e565b600460538111156135db576135da614bea565b5b8260538111156135ee576135ed614bea565b5b036135fc576020905061370e565b600560538111156136105761360f614bea565b5b82605381111561362357613622614bea565b5b03613631576040905061370e565b6006605381111561364557613644614bea565b5b82605381111561365857613657614bea565b5b03613666576080905061370e565b6007605381111561367a57613679614bea565b5b82605381111561368d5761368c614bea565b5b0361369b5760a0905061370e565b600860538111156136af576136ae614bea565b5b8260538111156136c2576136c1614bea565b5b036136d157610100905061370e565b816040517fbe7830b10000000000000000000000000000000000000000000000000000000081526004016137059190616377565b60405180910390fd5b919050565b73f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff16630620326d826040518263ffffffff1660e01b81526004016137609190614772565b602060405180830381865afa15801561377b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061379f9190614bbf565b6137e057806040517f4331a85d0000000000000000000000000000000000000000000000000000000081526004016137d79190614772565b60405180910390fd5b50565b73f3627f73c8ae1d0bdc2af62812284303a525eeef73ffffffffffffffffffffffffffffffffffffffff1663c6528f6983836040518363ffffffff1660e01b8152600401613832929190615d28565b602060405180830381865afa15801561384d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138719190614bbf565b6138b45781816040517f160a2b4b0000000000000000000000000000000000000000000000000000000081526004016138ab929190615d28565b60405180910390fd5b5050565b5f806040518060c00160405280608781526020016165e76087913980519060200120845f01518051906020012085602001516040516020016138fa919061641c565b6040516020818303038152906040528051906020012086604001518760600151886080015160405160200161392f9190615e56565b6040516020818303038152906040528051906020012060405160200161395a96959493929190616432565b60405160208183030381529060405280519060200120905061397c8382613d36565b91505092915050565b5f61398e613daa565b905090565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f6041845103613a13575f805f602087015192506040870151915060608701515f1a9050613a0588828585613e0d565b955095509550505050613a21565b5f600285515f1b9250925092505b9250925092565b5f6003811115613a3b57613a3a614bea565b5b826003811115613a4e57613a4d614bea565b5b0315613b865760016003811115613a6857613a67614bea565b5b826003811115613a7b57613a7a614bea565b5b03613ab2576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115613ac657613ac5614bea565b5b826003811115613ad957613ad8614bea565b5b03613b1d57805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401613b149190614c17565b60405180910390fd5b600380811115613b3057613b2f614bea565b5b826003811115613b4357613b42614bea565b5b03613b8557806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401613b7c9190614772565b60405180910390fd5b5b5050565b5f613b9361227b565b5f0160089054906101000a900460ff16905090565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b03613c0c57806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401613c039190614b7c565b60405180910390fd5b80613c387f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b613ba8565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff1684604051613ca39190615e56565b5f60405180830381855af49150503d805f8114613cdb576040519150601f19603f3d011682016040523d82523d5f602084013e613ce0565b606091505b5091509150613cf0858383613ef4565b9250505092915050565b5f341115613d34576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f807f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613d61613f81565b613d69613ff7565b8630604051602001613d7f959493929190616491565b604051602081830303815290604052805190602001209050613da18184613993565b91505092915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613dd4613f81565b613ddc613ff7565b4630604051602001613df2959493929190616491565b60405160208183030381529060405280519060200120905090565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115613e49575f600385925092509250613eea565b5f6001888888886040515f8152602001604052604051613e6c94939291906164e2565b6020604051602081039080840390855afa158015613e8c573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613edd575f60015f801b93509350935050613eea565b805f805f1b935093509350505b9450945094915050565b606082613f0957613f048261406e565b613f79565b5f8251148015613f2f57505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15613f7157836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401613f689190614b7c565b60405180910390fd5b819050613f7a565b5b9392505050565b5f80613f8b612897565b90505f613f966128be565b90505f81511115613fb257808051906020012092505050613ff4565b5f825f015490505f801b8114613fcd57809350505050613ff4565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f80614001612897565b90505f61400c61295c565b90505f815111156140285780805190602001209250505061406b565b5f826001015490505f801b81146140445780935050505061406b565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f815111156140805780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828054828255905f5260205f209081019282156140ec579160200282015b828111156140eb5782358255916020019190600101906140d0565b5b5090506140f99190614148565b5090565b828054828255905f5260205f20908101928215614137579160200282015b8281111561413657825182559160200191906001019061411b565b5b5090506141449190614148565b5090565b5b8082111561415f575f815f905550600101614149565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61418681614174565b8114614190575f80fd5b50565b5f813590506141a18161417d565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126141c8576141c76141a7565b5b8235905067ffffffffffffffff8111156141e5576141e46141ab565b5b602083019150836001820283011115614201576142006141af565b5b9250929050565b5f805f805f805f6080888a0312156142235761422261416c565b5b5f6142308a828b01614193565b975050602088013567ffffffffffffffff81111561425157614250614170565b5b61425d8a828b016141b3565b9650965050604088013567ffffffffffffffff8111156142805761427f614170565b5b61428c8a828b016141b3565b9450945050606088013567ffffffffffffffff8111156142af576142ae614170565b5b6142bb8a828b016141b3565b925092505092959891949750929550565b5f602082840312156142e1576142e061416c565b5b5f6142ee84828501614193565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61434982614320565b9050919050565b6143598161433f565b82525050565b5f61436a8383614350565b60208301905092915050565b5f602082019050919050565b5f61438c826142f7565b6143968185614301565b93506143a183614311565b805f5b838110156143d15781516143b8888261435f565b97506143c383614376565b9250506001810190506143a4565b5085935050505092915050565b5f6020820190508181035f8301526143f68184614382565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561443557808201518184015260208101905061441a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61445a826143fe565b6144648185614408565b9350614474818560208601614418565b61447d81614440565b840191505092915050565b5f6020820190508181035f8301526144a08184614450565b905092915050565b5f8083601f8401126144bd576144bc6141a7565b5b8235905067ffffffffffffffff8111156144da576144d96141ab565b5b6020830191508360208202830111156144f6576144f56141af565b5b9250929050565b5f805f80604085870312156145155761451461416c565b5b5f85013567ffffffffffffffff81111561453257614531614170565b5b61453e878288016144a8565b9450945050602085013567ffffffffffffffff81111561456157614560614170565b5b61456d878288016141b3565b925092505092959194509250565b5f8115159050919050565b61458f8161457b565b82525050565b5f6020820190506145a85f830184614586565b92915050565b6145b78161433f565b81146145c1575f80fd5b50565b5f813590506145d2816145ae565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61461282614440565b810181811067ffffffffffffffff82111715614631576146306145dc565b5b80604052505050565b5f614643614163565b905061464f8282614609565b919050565b5f67ffffffffffffffff82111561466e5761466d6145dc565b5b61467782614440565b9050602081019050919050565b828183375f83830152505050565b5f6146a461469f84614654565b61463a565b9050828152602081018484840111156146c0576146bf6145d8565b5b6146cb848285614684565b509392505050565b5f82601f8301126146e7576146e66141a7565b5b81356146f7848260208601614692565b91505092915050565b5f80604083850312156147165761471561416c565b5b5f614723858286016145c4565b925050602083013567ffffffffffffffff81111561474457614743614170565b5b614750858286016146d3565b9150509250929050565b5f819050919050565b61476c8161475a565b82525050565b5f6020820190506147855f830184614763565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6147bf8161478b565b82525050565b6147ce81614174565b82525050565b6147dd8161433f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61481581614174565b82525050565b5f614826838361480c565b60208301905092915050565b5f602082019050919050565b5f614848826147e3565b61485281856147ed565b935061485d836147fd565b805f5b8381101561488d578151614874888261481b565b975061487f83614832565b925050600181019050614860565b5085935050505092915050565b5f60e0820190506148ad5f83018a6147b6565b81810360208301526148bf8189614450565b905081810360408301526148d38188614450565b90506148e260608301876147c5565b6148ef60808301866147d4565b6148fc60a0830185614763565b81810360c083015261490e818461483e565b905098975050505050505050565b5f8083601f840112614931576149306141a7565b5b8235905067ffffffffffffffff81111561494e5761494d6141ab565b5b60208301915083604082028301111561496a576149696141af565b5b9250929050565b5f80fd5b5f6040828403121561498a57614989614971565b5b81905092915050565b5f604082840312156149a8576149a7614971565b5b81905092915050565b5f805f805f805f805f805f6101008c8e0312156149d1576149d061416c565b5b5f8c013567ffffffffffffffff8111156149ee576149ed614170565b5b6149fa8e828f0161491c565b9b509b50506020614a0d8e828f01614975565b99505060608c013567ffffffffffffffff811115614a2e57614a2d614170565b5b614a3a8e828f01614993565b9850506080614a4b8e828f016145c4565b97505060a08c013567ffffffffffffffff811115614a6c57614a6b614170565b5b614a788e828f016141b3565b965096505060c08c013567ffffffffffffffff811115614a9b57614a9a614170565b5b614aa78e828f016141b3565b945094505060e08c013567ffffffffffffffff811115614aca57614ac9614170565b5b614ad68e828f016141b3565b92509250509295989b509295989b9093969950565b5f805f805f60608688031215614b0457614b0361416c565b5b5f614b11888289016145c4565b955050602086013567ffffffffffffffff811115614b3257614b31614170565b5b614b3e8882890161491c565b9450945050604086013567ffffffffffffffff811115614b6157614b60614170565b5b614b6d888289016141b3565b92509250509295509295909350565b5f602082019050614b8f5f8301846147d4565b92915050565b614b9e8161457b565b8114614ba8575f80fd5b50565b5f81519050614bb981614b95565b92915050565b5f60208284031215614bd457614bd361416c565b5b5f614be184828501614bab565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f602082019050614c2a5f8301846147c5565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614c7457607f821691505b602082108103614c8757614c86614c30565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614cc482614174565b9150614ccf83614174565b9250828203905081811115614ce757614ce6614c8d565b5b92915050565b5f82825260208201905092915050565b5f614d088385614ced565b9350614d15838584614684565b614d1e83614440565b840190509392505050565b5f608082019050614d3c5f83018a6147c5565b8181036020830152614d4f81888a614cfd565b90508181036040830152614d64818688614cfd565b90508181036060830152614d79818486614cfd565b905098975050505050505050565b5f81905092915050565b5f614d9b826143fe565b614da58185614d87565b9350614db5818560208601614418565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f614df5600283614d87565b9150614e0082614dc1565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f614e3f600183614d87565b9150614e4a82614e0b565b600182019050919050565b5f614e608287614d91565b9150614e6b82614de9565b9150614e778286614d91565b9150614e8282614e33565b9150614e8e8285614d91565b9150614e9982614e33565b9150614ea58284614d91565b915081905095945050505050565b5f67ffffffffffffffff82169050919050565b614ecf81614eb3565b82525050565b5f602082019050614ee85f830184614ec6565b92915050565b5f81519050614efc816145ae565b92915050565b5f60208284031215614f1757614f1661416c565b5b5f614f2484828501614eee565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82905092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302614fc07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614f85565b614fca8683614f85565b95508019841693508086168417925050509392505050565b5f819050919050565b5f615005615000614ffb84614174565b614fe2565b614174565b9050919050565b5f819050919050565b61501e83614feb565b61503261502a8261500c565b848454614f91565b825550505050565b5f90565b61504661503a565b615051818484615015565b505050565b5b81811015615074576150695f8261503e565b600181019050615057565b5050565b601f8211156150b95761508a81614f64565b61509384614f76565b810160208510156150a2578190505b6150b66150ae85614f76565b830182615056565b50505b505050565b5f82821c905092915050565b5f6150d95f19846008026150be565b1980831691505092915050565b5f6150f183836150ca565b9150826002028217905092915050565b61510b8383614f5a565b67ffffffffffffffff811115615124576151236145dc565b5b61512e8254614c5d565b615139828285615078565b5f601f831160018114615166575f8415615154578287013590505b61515e85826150e6565b8655506151c5565b601f19841661517486614f64565b5f5b8281101561519b57848901358255600182019150602085019450602081019050615176565b868310156151b857848901356151b4601f8916826150ca565b8355505b6001600288020188555050505b50505050505050565b5f81549050919050565b5f82825260208201905092915050565b5f819050815f5260205f209050919050565b5f82825260208201905092915050565b5f815461521681614c5d565b61522081866151fa565b9450600182165f811461523a576001811461525057615282565b60ff198316865281151560200286019350615282565b61525985614f64565b5f5b8381101561527a5781548189015260018201915060208101905061525b565b808801955050505b50505092915050565b5f615296838361520a565b905092915050565b5f600182019050919050565b5f6152b4826151ce565b6152be81856151d8565b9350836020820285016152d0856151e8565b805f5b8581101561530a578484038952816152eb858261528b565b94506152f68361529e565b925060208a019950506001810190506152d3565b50829750879550505050505092915050565b5f6060820190508181035f830152615335818789614cfd565b9050818103602083015261534981866152aa565b9050818103604083015261535e818486614cfd565b90509695505050505050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f61539e601583614408565b91506153a98261536a565b602082019050919050565b5f6020820190508181035f8301526153cb81615392565b9050919050565b5f82825260208201905092915050565b5f80fd5b82818337505050565b5f6153fa83856153d2565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561542d5761542c6153e2565b5b60208302925061543e8385846153e6565b82840190509392505050565b5f6020820190508181035f8301526154638184866153ef565b90509392505050565b5f67ffffffffffffffff821115615486576154856145dc565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b6154a88161475a565b81146154b2575f80fd5b50565b5f815190506154c38161549f565b92915050565b5f815190506154d78161417d565b92915050565b5f67ffffffffffffffff8211156154f7576154f66145dc565b5b602082029050602081019050919050565b5f61551a615515846154dd565b61463a565b9050808382526020820190506020840283018581111561553d5761553c6141af565b5b835b8181101561556657806155528882614eee565b84526020840193505060208101905061553f565b5050509392505050565b5f82601f830112615584576155836141a7565b5b8151615594848260208601615508565b91505092915050565b5f608082840312156155b2576155b1615497565b5b6155bc608061463a565b90505f6155cb848285016154b5565b5f8301525060206155de848285016154c9565b60208301525060406155f2848285016154b5565b604083015250606082015167ffffffffffffffff8111156156165761561561549b565b5b61562284828501615570565b60608301525092915050565b5f61564061563b8461546c565b61463a565b90508083825260208201905060208402830185811115615663576156626141af565b5b835b818110156156aa57805167ffffffffffffffff811115615688576156876141a7565b5b808601615695898261559d565b85526020850194505050602081019050615665565b5050509392505050565b5f82601f8301126156c8576156c76141a7565b5b81516156d884826020860161562e565b91505092915050565b5f602082840312156156f6576156f561416c565b5b5f82015167ffffffffffffffff81111561571357615712614170565b5b61571f848285016156b4565b91505092915050565b5f61573282614174565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361576457615763614c8d565b5b600182019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6157a18161475a565b82525050565b5f82825260208201905092915050565b5f6157c1826142f7565b6157cb81856157a7565b93506157d683614311565b805f5b838110156158065781516157ed888261435f565b97506157f883614376565b9250506001810190506157d9565b5085935050505092915050565b5f608083015f8301516158285f860182615798565b50602083015161583b602086018261480c565b50604083015161584e6040860182615798565b506060830151848203606086015261586682826157b7565b9150508091505092915050565b5f61587e8383615813565b905092915050565b5f602082019050919050565b5f61589c8261576f565b6158a68185615779565b9350836020820285016158b885615789565b805f5b858110156158f357848403895281516158d48582615873565b94506158df83615886565b925060208a019950506001810190506158bb565b50829750879550505050505092915050565b5f6040820190508181035f83015261591d8186615892565b90508181036020830152615932818486614cfd565b9050949350505050565b5f80fd5b5f80fd5b5f80fd5b5f80833560016020038436030381126159645761596361593c565b5b80840192508235915067ffffffffffffffff82111561598657615985615940565b5b6020830192506020820236038313156159a2576159a1615944565b5b509250929050565b5f60ff82169050919050565b5f6159d06159cb6159c6846159aa565b614fe2565b614174565b9050919050565b6159e0816159b6565b82525050565b5f6040820190506159f95f8301856159d7565b615a0660208301846147c5565b9392505050565b5f60408284031215615a2257615a21615497565b5b615a2c604061463a565b90505f615a3b84828501614193565b5f830152506020615a4e84828501614193565b60208301525092915050565b5f60408284031215615a6f57615a6e61416c565b5b5f615a7c84828501615a0d565b91505092915050565b5f819050919050565b5f615a9c60208401846145c4565b905092915050565b5f602082019050919050565b5f615abb8385614301565b9350615ac682615a85565b805f5b85811015615afe57615adb8284615a8e565b615ae5888261435f565b9750615af083615aa4565b925050600181019050615ac9565b5085925050509392505050565b5f604082019050615b1e5f8301866147d4565b8181036020830152615b31818486615ab0565b9050949350505050565b5f81519050919050565b5f819050602082019050919050565b5f615b5f8383615798565b60208301905092915050565b5f602082019050919050565b5f615b8182615b3b565b615b8b81856153d2565b9350615b9683615b45565b805f5b83811015615bc6578151615bad8882615b54565b9750615bb883615b6b565b925050600181019050615b99565b5085935050505092915050565b5f6020820190508181035f830152615beb8184615b77565b905092915050565b5f81519050919050565b615c0682615bf3565b67ffffffffffffffff811115615c1f57615c1e6145dc565b5b615c298254614c5d565b615c34828285615078565b5f60209050601f831160018114615c65575f8415615c53578287015190505b615c5d85826150e6565b865550615cc4565b601f198416615c7386614f64565b5f5b82811015615c9a57848901518255600182019150602085019450602081019050615c75565b86831015615cb75784890151615cb3601f8916826150ca565b8355505b6001600288020188555050505b505050505050565b5f6080820190508181035f830152615ce48189615892565b9050615cf360208301886147d4565b8181036040830152615d06818688614cfd565b90508181036060830152615d1b818486614cfd565b9050979650505050505050565b5f604082019050615d3b5f830185614763565b615d4860208301846147d4565b9392505050565b5f60208284031215615d6457615d6361416c565b5b5f615d71848285016145c4565b91505092915050565b5f81905092915050565b615d8d8161475a565b82525050565b5f615d9e8383615d84565b60208301905092915050565b5f615db482615b3b565b615dbe8185615d7a565b9350615dc983615b45565b805f5b83811015615df9578151615de08882615d93565b9750615deb83615b6b565b925050600181019050615dcc565b5085935050505092915050565b5f615e118284615daa565b915081905092915050565b5f81905092915050565b5f615e3082615bf3565b615e3a8185615e1c565b9350615e4a818560208601614418565b80840191505092915050565b5f615e618284615e26565b915081905092915050565b5f60a082019050615e7f5f830188614763565b615e8c6020830187614763565b615e996040830186614763565b615ea66060830185614763565b615eb36080830184614763565b9695505050505050565b5f604082019050615ed05f8301856147c5565b615edd60208301846147d4565b9392505050565b5f60208284031215615ef957615ef861416c565b5b5f615f06848285016154c9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f60208284031215615f5157615f5061416c565b5b5f615f5e848285016154b5565b91505092915050565b5f608082019050615f7a5f830187614763565b615f876020830186614763565b615f946040830185614763565b615fa16060830184614763565b95945050505050565b5f615fb482614174565b9150615fbf83614174565b9250828201905080821115615fd757615fd6614c8d565b5b92915050565b5f604082019050615ff05f8301856147c5565b615ffd60208301846147c5565b9392505050565b5f608083015f8301516160195f860182615798565b50602083015161602c602086018261480c565b50604083015161603f6040860182615798565b506060830151848203606086015261605782826157b7565b9150508091505092915050565b5f6040820190508181035f83015261607c8185616004565b905081810360208301526160908184616004565b90509392505050565b5f61ffff82169050919050565b5f6160c06160bb6160b684616099565b614fe2565b614174565b9050919050565b6160d0816160a6565b82525050565b5f6040820190506160e95f8301856160c7565b6160f660208301846147c5565b9392505050565b5f61610782614174565b915061611283614174565b925082820261612081614174565b9150828204841483151761613757616136614c8d565b5b5092915050565b604082015f8201516161525f85018261480c565b506020820151616165602085018261480c565b50505050565b5f60608201905061617e5f8301856147c5565b61618b602083018461613e565b9392505050565b5f6040820190506161a55f8301856147d4565b81810360208301526161b78184614382565b90509392505050565b5f6020820190508181035f8301526161d9818486614cfd565b90509392505050565b5f819050815f5260205f209050919050565b601f82111561623557616206816161e2565b61620f84614f76565b8101602085101561621e578190505b61623261622a85614f76565b830182615056565b50505b505050565b616243826143fe565b67ffffffffffffffff81111561625c5761625b6145dc565b5b6162668254614c5d565b6162718282856161f4565b5f60209050601f8311600181146162a2575f8415616290578287015190505b61629a85826150e6565b865550616301565b601f1984166162b0866161e2565b5f5b828110156162d7578489015182556001820191506020850194506020810190506162b2565b868310156162f457848901516162f0601f8916826150ca565b8355505b6001600288020188555050505b505050505050565b616312816159aa565b82525050565b5f60208201905061632b5f830184616309565b92915050565b6054811061634257616341614bea565b5b50565b5f81905061635282616331565b919050565b5f61636182616345565b9050919050565b61637181616357565b82525050565b5f60208201905061638a5f830184616368565b92915050565b5f81905092915050565b6163a38161433f565b82525050565b5f6163b4838361639a565b60208301905092915050565b5f6163ca826142f7565b6163d48185616390565b93506163df83614311565b805f5b8381101561640f5781516163f688826163a9565b975061640183614376565b9250506001810190506163e2565b5085935050505092915050565b5f61642782846163c0565b915081905092915050565b5f60c0820190506164455f830189614763565b6164526020830188614763565b61645f6040830187614763565b61646c60608301866147c5565b61647960808301856147c5565b61648660a0830184614763565b979650505050505050565b5f60a0820190506164a45f830188614763565b6164b16020830187614763565b6164be6040830186614763565b6164cb60608301856147c5565b6164d860808301846147d4565b9695505050505050565b5f6080820190506164f55f830187614763565b6165026020830186616309565b61650f6040830185614763565b61651c6060830184614763565b9594505050505056fe5573657244656372797074526573706f6e7365566572696669636174696f6e286279746573207075626c69634b65792c627974657333325b5d20637448616e646c65732c6279746573207573657244656372797074656453686172652c627974657320657874726144617461295075626c696344656372797074566572696669636174696f6e28627974657333325b5d20637448616e646c65732c627974657320646563727970746564526573756c742c62797465732065787472614461746129557365724465637279707452657175657374566572696669636174696f6e286279746573207075626c69634b65792c616464726573735b5d20636f6e74726163744164647265737365732c75696e7432353620737461727454696d657374616d702c75696e74323536206475726174696f6e446179732c62797465732065787472614461746129 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80`@R`\x046\x10a\x01\x13W_5`\xE0\x1C\x80c\\\x97Z\xBB\x11a\0\x9FW\x80c\xAD<\xB1\xCC\x11a\0cW\x80c\xAD<\xB1\xCC\x14a\x03OW\x80c\xB6\xE9\xA9\xB3\x14a\x03yW\x80c\xD8\x99\x8FE\x14a\x03\xB5W\x80c\xF1\xB5z\xDB\x14a\x03\xDDW\x80c\xFB\xB82Y\x14a\x04\x05Wa\x01\x13V[\x80c\\\x97Z\xBB\x14a\x02\x8FW\x80co\x89\x13\xBC\x14a\x02\xB9W\x80c\x84V\xCBY\x14a\x02\xE1W\x80c\x84\xB0\x19n\x14a\x02\xF7W\x80c\x9F\xADZ/\x14a\x03'Wa\x01\x13V[\x80c?K\xA8:\x11a\0\xE6W\x80c?K\xA8:\x14a\x01\xBBW\x80c@\x14\xC4\xCD\x14a\x01\xD1W\x80cO\x1E\xF2\x86\x14a\x02\rW\x80cR\xD1\x90-\x14a\x02)W\x80cX\xF5\xB8\xAB\x14a\x02SWa\x01\x13V[\x80c\x04o\x9E\xB3\x14a\x01\x17W\x80c\t\0\xCCi\x14a\x01?W\x80c\r\x8En,\x14a\x01{W\x80c9\xF78\x10\x14a\x01\xA5W[_\x80\xFD[4\x80\x15a\x01\"W_\x80\xFD[Pa\x01=`\x04\x806\x03\x81\x01\x90a\x018\x91\x90aM\x81V[a\x04AV[\0[4\x80\x15a\x01JW_\x80\xFD[Pa\x01e`\x04\x806\x03\x81\x01\x90a\x01`\x91\x90aNEV[a\x08\xCFV[`@Qa\x01r\x91\x90aOWV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x86W_\x80\xFD[Pa\x01\x8Fa\t\xA0V[`@Qa\x01\x9C\x91\x90aP\x01V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xB0W_\x80\xFD[Pa\x01\xB9a\n\x1BV[\0[4\x80\x15a\x01\xC6W_\x80\xFD[Pa\x01\xCFa\x0CSV[\0[4\x80\x15a\x01\xDCW_\x80\xFD[Pa\x01\xF7`\x04\x806\x03\x81\x01\x90a\x01\xF2\x91\x90aPvV[a\r\x9BV[`@Qa\x02\x04\x91\x90aQ\x0EV[`@Q\x80\x91\x03\x90\xF3[a\x02'`\x04\x806\x03\x81\x01\x90a\x02\"\x91\x90aRyV[a\x0F(V[\0[4\x80\x15a\x024W_\x80\xFD[Pa\x02=a\x0FGV[`@Qa\x02J\x91\x90aR\xEBV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02^W_\x80\xFD[Pa\x02y`\x04\x806\x03\x81\x01\x90a\x02t\x91\x90aNEV[a\x0FxV[`@Qa\x02\x86\x91\x90aQ\x0EV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\x9AW_\x80\xFD[Pa\x02\xA3a\x0F\xACV[`@Qa\x02\xB0\x91\x90aQ\x0EV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\xC4W_\x80\xFD[Pa\x02\xDF`\x04\x806\x03\x81\x01\x90a\x02\xDA\x91\x90aM\x81V[a\x0F\xCEV[\0[4\x80\x15a\x02\xECW_\x80\xFD[Pa\x02\xF5a\x13\xD7V[\0[4\x80\x15a\x03\x02W_\x80\xFD[Pa\x03\x0Ba\x14\xFCV[`@Qa\x03\x1E\x97\x96\x95\x94\x93\x92\x91\x90aT\x13V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x032W_\x80\xFD[Pa\x03M`\x04\x806\x03\x81\x01\x90a\x03H\x91\x90aUHV[a\x16\x05V[\0[4\x80\x15a\x03ZW_\x80\xFD[Pa\x03ca\x1BWV[`@Qa\x03p\x91\x90aP\x01V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\x84W_\x80\xFD[Pa\x03\x9F`\x04\x806\x03\x81\x01\x90a\x03\x9A\x91\x90aV\xD8V[a\x1B\x90V[`@Qa\x03\xAC\x91\x90aQ\x0EV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\xC0W_\x80\xFD[Pa\x03\xDB`\x04\x806\x03\x81\x01\x90a\x03\xD6\x91\x90aPvV[a\x1E\xAEV[\0[4\x80\x15a\x03\xE8W_\x80\xFD[Pa\x04\x03`\x04\x806\x03\x81\x01\x90a\x03\xFE\x91\x90aW\xAFV[a lV[\0[4\x80\x15a\x04\x10W_\x80\xFD[Pa\x04+`\x04\x806\x03\x81\x01\x90a\x04&\x91\x90aX\xE9V[a%\x1DV[`@Qa\x048\x91\x90aQ\x0EV[`@Q\x80\x91\x03\x90\xF3[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x04\x8E\x91\x90aYzV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04\xA9W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xCD\x91\x90aY\xBDV[a\x05\x0EW3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x05\x05\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[_a\x05\x17a'\x8CV[\x90P`\xF8`\x02`\x05\x81\x11\x15a\x05/Wa\x05.aY\xE8V[[\x90\x1B\x88\x11\x15\x80a\x05BWP\x80`\t\x01T\x88\x11[\x15a\x05\x84W\x87`@Q\x7F\xD4\x8A\xF9B\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\x81R`\x04\x01a\x05{\x91\x90aZ\x15V[`@Q\x80\x91\x03\x90\xFD[_\x81`\x08\x01_\x8A\x81R` \x01\x90\x81R` \x01_ `@Q\x80`@\x01`@R\x90\x81_\x82\x01\x80Ta\x05\xB2\x90aZ[V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x05\xDE\x90aZ[V[\x80\x15a\x06)W\x80`\x1F\x10a\x06\0Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x06)V[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x06\x0CW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81R` \x01`\x01\x82\x01\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x06\x7FW` \x02\x82\x01\x91\x90_R` _ \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x06kW[PPPPP\x81RPP\x90P_`@Q\x80`\x80\x01`@R\x80\x83_\x01Q\x81R` \x01\x83` \x01Q\x81R` \x01\x8A\x8A\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90P_a\x07E\x82a'\xB3V[\x90Pa\x07S\x8B\x82\x8A\x8Aa(zV[_\x84`\x03\x01_\x8D\x81R` \x01\x90\x81R` \x01_ _\x80_\x1B\x81R` \x01\x90\x81R` \x01_ \x90P\x803\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x8B\x7F\x7F\xCD\xFBS\x81\x91\x7FUJq}\nTp\xA3?ZI\xBAdE\xF0^\xC4=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0C\xD4\x91\x90a]\0V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15\x80\x15a\rOWPs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\r\x91W3`@Q\x7F\xE1\x91f\xEE\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\x81R`\x04\x01a\r\x88\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[a\r\x99a+\xB9V[V[_\x80_\x90P[\x85\x85\x90P\x81\x10\x15a\x0F\x1AWs\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x06 2m\x87\x87\x84\x81\x81\x10a\r\xEFWa\r\xEEa]+V[[\x90P` \x02\x015`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\x12\x91\x90aR\xEBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E-W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0EQ\x91\x90aY\xBDV[\x15\x80a\x0E\xFFWPs\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xDC\x9Ao\x87\x87\x84\x81\x81\x10a\x0E\x9BWa\x0E\x9Aa]+V[[\x90P` \x02\x015`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\xBE\x91\x90aR\xEBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E\xD9W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0E\xFD\x91\x90aY\xBDV[\x15[\x15a\x0F\rW_\x91PPa\x0F V[\x80\x80`\x01\x01\x91PPa\r\xA1V[P`\x01\x90P[\x94\x93PPPPV[a\x0F0a,'V[a\x0F9\x82a-\rV[a\x0FC\x82\x82a.\0V[PPV[_a\x0FPa/\x1EV[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[_\x80a\x0F\x82a'\x8CV[\x90P\x80`\x01\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[_\x80a\x0F\xB6a/\xA5V[\x90P\x80_\x01_\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x90V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x10\x1B\x91\x90aYzV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x106W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10Z\x91\x90aY\xBDV[a\x10\x9BW3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x10\x92\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[_a\x10\xA4a'\x8CV[\x90P`\xF8`\x01`\x05\x81\x11\x15a\x10\xBCWa\x10\xBBaY\xE8V[[\x90\x1B\x88\x11\x15\x80a\x10\xCFWP\x80`\x07\x01T\x88\x11[\x15a\x11\x11W\x87`@Q\x7F\xD4\x8A\xF9B\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\x81R`\x04\x01a\x11\x08\x91\x90aZ\x15V[`@Q\x80\x91\x03\x90\xFD[_`@Q\x80``\x01`@R\x80\x83`\x06\x01_\x8C\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x11xW` \x02\x82\x01\x91\x90_R` _ \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x11dW[PPPPP\x81R` \x01\x89\x89\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x85\x85\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90P_a\x12\x1E\x82a/\xCCV[\x90Pa\x12,\x8A\x82\x89\x89a(zV[_\x83`\x05\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _\x83\x81R` \x01\x90\x81R` \x01_ \x90P\x80\x88\x88\x90\x91\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x92\x90\x91\x92\x90\x91\x92\x90\x91\x92P\x91\x82a\x12\x8A\x92\x91\x90a^\xFFV[P\x83`\x03\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _\x83\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x83`\x01\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x13AWPa\x13@\x81\x80T\x90Pa0\x86V[[\x15a\x13\xCAW`\x01\x84`\x01\x01_\x8D\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x81\x84`\x04\x01_\x8D\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x8A\x7F\xD7\xE5\x8A6z\nl)\x8Ev\xAD]$\0\x04\xE3'\xAA\x14#\xCB\xE4\xBD\x7F\xF8]Lq^\xF8\xD1_\x8B\x8B\x84\x8A\x8A`@Qa\x13\xC1\x95\x94\x93\x92\x91\x90aa\x1AV[`@Q\x80\x91\x03\x90\xA2[PPPPPPPPPPPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cF\xFB\xF6\x8E3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x14$\x91\x90aYzV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x14?W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x14c\x91\x90aY\xBDV[\x15\x80\x15a\x14\xB0WPs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x14\xF2W3`@Q\x7F8\x89\x16\xBB\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\x81R`\x04\x01a\x14\xE9\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[a\x14\xFAa1\x17V[V[_``\x80_\x80_``_a\x15\x0Ea1\x86V[\x90P_\x80\x1B\x81_\x01T\x14\x80\x15a\x15)WP_\x80\x1B\x81`\x01\x01T\x14[a\x15hW`@Q\x7F\x08\xC3y\xA0\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\x81R`\x04\x01a\x15_\x90aa\xB2V[`@Q\x80\x91\x03\x90\xFD[a\x15pa1\xADV[a\x15xa2KV[F0_\x80\x1B_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x15\x97Wa\x15\x96aQUV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x15\xC5W\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x7F\x0F\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\x95\x94\x93\x92\x91\x90\x97P\x97P\x97P\x97P\x97P\x97P\x97PP\x90\x91\x92\x93\x94\x95\x96V[a\x16\ra2\xE9V[_\x87\x80` \x01\x90a\x16\x1E\x91\x90aa\xDCV[\x90P\x03a\x16WW`@Q\x7FW\xCF\xA2\x17\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\n`\xFF\x16\x87\x80` \x01\x90a\x16l\x91\x90aa\xDCV[\x90P\x11\x15a\x16\xC5W`\n\x87\x80` \x01\x90a\x16\x86\x91\x90aa\xDCV[\x90P`@Q\x7F\xAF\x1F\x04\x95\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\x81R`\x04\x01a\x16\xBC\x92\x91\x90abzV[`@Q\x80\x91\x03\x90\xFD[a\x16\xDE\x89\x806\x03\x81\x01\x90a\x16\xD9\x91\x90ab\xF6V[a3*V[a\x17G\x87\x80` \x01\x90a\x16\xF1\x91\x90aa\xDCV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x89_\x01` \x81\x01\x90a\x17B\x91\x90ac!V[a4uV[\x15a\x17\xACW\x87_\x01` \x81\x01\x90a\x17^\x91\x90ac!V[\x87\x80` \x01\x90a\x17n\x91\x90aa\xDCV[`@Q\x7F\xC3Dj\xC7\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\x81R`\x04\x01a\x17\xA3\x93\x92\x91\x90ac\xD2V[`@Q\x80\x91\x03\x90\xFD[_a\x18\x18\x8C\x8C\x8A\x80` \x01\x90a\x17\xC2\x91\x90aa\xDCV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x8C_\x01` \x81\x01\x90a\x18\x13\x91\x90ac!V[a4\xF3V[\x90Pa\x187\x88_\x015\x8A\x8A\x80` \x01\x90a\x182\x91\x90aa\xDCV[a6\xE6V[_`@Q\x80`\xC0\x01`@R\x80\x89\x89\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x8A\x80` \x01\x90a\x18\x9C\x91\x90aa\xDCV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x8B_\x01` \x81\x01\x90a\x18\xF2\x91\x90ac!V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x8C_\x015\x81R` \x01\x8C` \x015\x81R` \x01\x85\x85\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90Pa\x19\x8B\x81\x8B` \x01` \x81\x01\x90a\x19\x80\x91\x90ac!V[\x88\x88\x8D_\x015a7\xC5V[_s\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xA1O\x89q\x84`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x19\xD9\x91\x90ad\xB9V[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x19\xF3W=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1A\x1B\x91\x90agFV[\x90Pa\x1A&\x81a8\x9DV[_a\x1A/a'\x8CV[\x90P\x80`\t\x01_\x81T\x80\x92\x91\x90a\x1AE\x90ag\x8DV[\x91\x90PUP_\x81`\t\x01T\x90P`@Q\x80`@\x01`@R\x80\x8C\x8C\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x86\x81RP\x82`\x08\x01_\x83\x81R` \x01\x90\x81R` \x01_ _\x82\x01Q\x81_\x01\x90\x81a\x1A\xD0\x91\x90ag\xDEV[P` \x82\x01Q\x81`\x01\x01\x90\x80Q\x90` \x01\x90a\x1A\xED\x92\x91\x90aL+V[P\x90PP\x80\x7F\xF9\x01\x1B\xD6\xBA\r\xA6\x04\x9CR\rp\xFEYq\xF1~\xD7\xAByT\x86\x05%D\xB5\x10\x19\x89lYk\x84\x8F` \x01` \x81\x01\x90a\x1B'\x91\x90ac!V[\x8E\x8E\x8C\x8C`@Qa\x1B=\x96\x95\x94\x93\x92\x91\x90aj4V[`@Q\x80\x91\x03\x90\xA2PPPPPPPPPPPPPPPPV[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[_s\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c+\x13Y\x1C\x8A\x8A\x88\x88`@Q\x85c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1B\xE4\x94\x93\x92\x91\x90aj\xCDV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1B\xFFW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1C#\x91\x90aY\xBDV[a\x1C/W_\x90Pa\x1E\xA2V[_[\x87\x87\x90P\x81\x10\x15a\x1E\x9CWs\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC6R\x8Fi\x89\x89\x84\x81\x81\x10a\x1C\x7FWa\x1C~a]+V[[\x90P`@\x02\x01_\x015\x8B_\x01` \x81\x01\x90a\x1C\x9A\x91\x90ac!V[`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1C\xB7\x92\x91\x90ak\x0BV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1C\xD2W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1C\xF6\x91\x90aY\xBDV[\x15\x80a\x1D\xD2WPs\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC6R\x8Fi\x89\x89\x84\x81\x81\x10a\x1D@Wa\x1D?a]+V[[\x90P`@\x02\x01_\x015\x8A\x8A\x85\x81\x81\x10a\x1D\\Wa\x1D[a]+V[[\x90P`@\x02\x01` \x01` \x81\x01\x90a\x1Dt\x91\x90ac!V[`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\x91\x92\x91\x90ak\x0BV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1D\xACW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1D\xD0\x91\x90aY\xBDV[\x15[\x80a\x1E\x81WPs\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xDC\x9Ao\x89\x89\x84\x81\x81\x10a\x1E\x1BWa\x1E\x1Aa]+V[[\x90P`@\x02\x01_\x015`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E@\x91\x90aR\xEBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1E[W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1E\x7F\x91\x90aY\xBDV[\x15[\x15a\x1E\x8FW_\x91PPa\x1E\xA2V[\x80\x80`\x01\x01\x91PPa\x1C1V[P`\x01\x90P[\x98\x97PPPPPPPPV[a\x1E\xB6a2\xE9V[_\x84\x84\x90P\x03a\x1E\xF2W`@Q\x7F-\xE7T8\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x1F;\x84\x84\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa9\x83V[_s\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xA1O\x89q\x86\x86`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F\x8B\x92\x91\x90ak\x9AV[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1F\xA5W=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1F\xCD\x91\x90agFV[\x90Pa\x1F\xD8\x81a8\x9DV[_a\x1F\xE1a'\x8CV[\x90P\x80`\x07\x01_\x81T\x80\x92\x91\x90a\x1F\xF7\x90ag\x8DV[\x91\x90PUP_\x81`\x07\x01T\x90P\x86\x86\x83`\x06\x01_\x84\x81R` \x01\x90\x81R` \x01_ \x91\x90a &\x92\x91\x90aLvV[P\x80\x7F\"\xDBH\n9\xBDrUd8\xAA\xDBJ2\xA3\xD2\xA6c\x8B\x87\xC0;\xBE\xC5\xFE\xF6\x99~\x10\x95\x87\xFF\x84\x87\x87`@Qa [\x93\x92\x91\x90ak\xBCV[`@Q\x80\x91\x03\x90\xA2PPPPPPPV[a ta2\xE9V[_\x88\x80` \x01\x90a \x85\x91\x90aa\xDCV[\x90P\x03a \xBEW`@Q\x7FW\xCF\xA2\x17\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\n`\xFF\x16\x88\x80` \x01\x90a \xD3\x91\x90aa\xDCV[\x90P\x11\x15a!,W`\n\x88\x80` \x01\x90a \xED\x91\x90aa\xDCV[\x90P`@Q\x7F\xAF\x1F\x04\x95\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\x81R`\x04\x01a!#\x92\x91\x90abzV[`@Q\x80\x91\x03\x90\xFD[a!E\x89\x806\x03\x81\x01\x90a!@\x91\x90ab\xF6V[a3*V[a!\x9D\x88\x80` \x01\x90a!X\x91\x90aa\xDCV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x88a4uV[\x15a!\xF1W\x86\x88\x80` \x01\x90a!\xB3\x91\x90aa\xDCV[`@Q\x7F\xDCMx\xB1\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\x81R`\x04\x01a!\xE8\x93\x92\x91\x90ac\xD2V[`@Q\x80\x91\x03\x90\xFD[_a\"L\x8C\x8C\x8B\x80` \x01\x90a\"\x07\x91\x90aa\xDCV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x8Ba4\xF3V[\x90P_`@Q\x80`\xA0\x01`@R\x80\x89\x89\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x8B\x80` \x01\x90a\"\xB3\x91\x90aa\xDCV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x8C_\x015\x81R` \x01\x8C` \x015\x81R` \x01\x85\x85\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90Pa#c\x81\x8A\x88\x88\x8E_\x015a:;V[_s\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xA1O\x89q\x84`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a#\xB1\x91\x90ad\xB9V[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a#\xCBW=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a#\xF3\x91\x90agFV[\x90Pa#\xFE\x81a8\x9DV[_a$\x07a'\x8CV[\x90P\x80`\t\x01_\x81T\x80\x92\x91\x90a$\x1D\x90ag\x8DV[\x91\x90PUP_\x81`\t\x01T\x90P`@Q\x80`@\x01`@R\x80\x8C\x8C\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x86\x81RP\x82`\x08\x01_\x83\x81R` \x01\x90\x81R` \x01_ _\x82\x01Q\x81_\x01\x90\x81a$\xA8\x91\x90ag\xDEV[P` \x82\x01Q\x81`\x01\x01\x90\x80Q\x90` \x01\x90a$\xC5\x92\x91\x90aL+V[P\x90PP\x80\x7F\xF9\x01\x1B\xD6\xBA\r\xA6\x04\x9CR\rp\xFEYq\xF1~\xD7\xAByT\x86\x05%D\xB5\x10\x19\x89lYk\x84\x8E\x8E\x8E\x8C\x8C`@Qa%\x03\x96\x95\x94\x93\x92\x91\x90aj4V[`@Q\x80\x91\x03\x90\xA2PPPPPPPPPPPPPPPPV[_\x80_\x90P[\x85\x85\x90P\x81\x10\x15a'}Ws\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC6R\x8Fi\x87\x87\x84\x81\x81\x10a%qWa%pa]+V[[\x90P`@\x02\x01_\x015\x89`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a%\x98\x92\x91\x90ak\x0BV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a%\xB3W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a%\xD7\x91\x90aY\xBDV[\x15\x80a&\xB3WPs\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC6R\x8Fi\x87\x87\x84\x81\x81\x10a&!Wa& a]+V[[\x90P`@\x02\x01_\x015\x88\x88\x85\x81\x81\x10a&=Wa&=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a&\xB1\x91\x90aY\xBDV[\x15[\x80a'bWPs\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xDC\x9Ao\x87\x87\x84\x81\x81\x10a&\xFCWa&\xFBa]+V[[\x90P`@\x02\x01_\x015`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a'!\x91\x90aR\xEBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a'=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a'`\x91\x90aY\xBDV[\x15[\x15a'pW_\x91PPa'\x83V[\x80\x80`\x01\x01\x91PPa%#V[P`\x01\x90P[\x95\x94PPPPPV[_\x7Fh\x11>h\xAFILn\xFD\x02\x10\xFCK\xF9\xBAt\x8D\x1F\xFA\xDA\xA4q\x82\x17\xFD\xF65H\xC4\xAE\xE7\0\x90P\x90V[_a(s`@Q\x80`\xA0\x01`@R\x80`m\x81R` \x01at\x0C`m\x919\x80Q\x90` \x01 \x83_\x01Q\x80Q\x90` \x01 \x84` \x01Q`@Q` \x01a'\xF7\x91\x90al\x7FV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x85`@\x01Q\x80Q\x90` \x01 \x86``\x01Q`@Q` \x01a(.\x91\x90al\xCFV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a(X\x95\x94\x93\x92\x91\x90al\xE5V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a;\x13V[\x90P\x91\x90PV[_a(\x83a'\x8CV[\x90P_a(\xD3\x85\x85\x85\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa;,V[\x90Pa(\xDE\x81a;VV[\x81`\x02\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a)}W\x85\x81`@Q\x7F\x99\xECH\xD9\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\x81R`\x04\x01a)t\x92\x91\x90am6V[`@Q\x80\x91\x03\x90\xFD[`\x01\x82`\x02\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPPPPPPPV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC2\xB4)\x86`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a*JW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a*n\x91\x90am]V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[``_`\x01a*\x8A\x84a<&V[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a*\xA8Wa*\xA7aQUV[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a*\xDAW\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a+;W\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a+0Wa+/am\x88V[[\x04\x94P_\x85\x03a*\xE7W[\x81\x93PPPP\x91\x90PV[_a+Oa+jV[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[a+\x99a=wV[a+\xA3\x82\x82a=\xB7V[PPV[a+\xAFa=wV[a+\xB7a>\x08V[V[a+\xC1a>8V[_a+\xCAa/\xA5V[\x90P_\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F]\xB9\xEE\nI[\xF2\xE6\xFF\x9C\x91\xA7\x83L\x1B\xA4\xFD\xD2D\xA5\xE8\xAANS{\xD3\x8A\xEA\xE4\xB0s\xAAa,\x0Fa>xV[`@Qa,\x1C\x91\x90aYzV[`@Q\x80\x91\x03\x90\xA1PV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a,\xD4WP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a,\xBBa>\x7FV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a-\x0BW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a-jW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a-\x8E\x91\x90a]\0V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a-\xFDW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a-\xF4\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a.hWP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a.e\x91\x90am\xB5V[`\x01[a.\xA9W\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a.\xA0\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a/\x0FW\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a/\x06\x91\x90aR\xEBV[`@Q\x80\x91\x03\x90\xFD[a/\x19\x83\x83a>\xD2V[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a/\xA3W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x7F\xCD^\xD1\\n\x18~w\xE9\xAE\xE8\x81\x84\xC2\x1FO!\x82\xABX'\xCB;~\x07\xFB\xED\xCDc\xF03\0\x90P\x90V[_a0\x7F`@Q\x80`\x80\x01`@R\x80`T\x81R` \x01aty`T\x919\x80Q\x90` \x01 \x83_\x01Q`@Q` \x01a0\x04\x91\x90al\x7FV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x84` \x01Q\x80Q\x90` \x01 \x85`@\x01Q`@Q` \x01a0;\x91\x90al\xCFV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a0d\x94\x93\x92\x91\x90am\xE0V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a;\x13V[\x90P\x91\x90PV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c*8\x89\x98`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a0\xE5W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a1\t\x91\x90am]V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[a1\x1Fa2\xE9V[_a1(a/\xA5V[\x90P`\x01\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7Fb\xE7\x8C\xEA\x01\xBE\xE3 \xCDNB\x02p\xB5\xEAt\0\r\x11\xB0\xC9\xF7GT\xEB\xDB\xFCTK\x05\xA2Xa1na>xV[`@Qa1{\x91\x90aYzV[`@Q\x80\x91\x03\x90\xA1PV[_\x7F\xA1jF\xD9Ba\xC7Q|\xC8\xFF\x89\xF6\x1C\x0C\xE95\x98\xE3\xC8I\x80\x10\x11\xDE\xE6I\xA6\xA5W\xD1\0\x90P\x90V[``_a1\xB8a1\x86V[\x90P\x80`\x02\x01\x80Ta1\xC9\x90aZ[V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta1\xF5\x90aZ[V[\x80\x15a2@W\x80`\x1F\x10a2\x17Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a2@V[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a2#W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[``_a2Va1\x86V[\x90P\x80`\x03\x01\x80Ta2g\x90aZ[V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta2\x93\x90aZ[V[\x80\x15a2\xDEW\x80`\x1F\x10a2\xB5Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a2\xDEV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a2\xC1W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[a2\xF1a\x0F\xACV[\x15a3(W`@Q\x7F\xD9<\x06e\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x81` \x01Q\x03a3gW`@Q\x7F\xDE(Y\xC1\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x01ma\xFF\xFF\x16\x81` \x01Q\x11\x15a3\xBEWa\x01m\x81` \x01Q`@Q\x7F2\x95\x18c\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\x81R`\x04\x01a3\xB5\x92\x91\x90an`V[`@Q\x80\x91\x03\x90\xFD[B\x81_\x01Q\x11\x15a4\x0BWB\x81_\x01Q`@Q\x7F\xF2L\x08\x87\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\x81R`\x04\x01a4\x02\x92\x91\x90an\x87V[`@Q\x80\x91\x03\x90\xFD[Bb\x01Q\x80\x82` \x01Qa4\x1F\x91\x90an\xAEV[\x82_\x01Qa4-\x91\x90an\xEFV[\x10\x15a4rWB\x81`@Q\x7F04\x80@\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\x81R`\x04\x01a4i\x92\x91\x90aoOV[`@Q\x80\x91\x03\x90\xFD[PV[_\x80_\x90P[\x83Q\x81\x10\x15a4\xE8W\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84\x82\x81Q\x81\x10a4\xAEWa4\xADa]+V[[` \x02` \x01\x01Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x03a4\xDBW`\x01\x91PPa4\xEDV[\x80\x80`\x01\x01\x91PPa4{V[P_\x90P[\x92\x91PPV[``_\x85\x85\x90P\x03a51W`@Q\x7F\xA6\xA6\xCB!\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84\x84\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a5NWa5MaQUV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a5|W\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x80[\x86\x86\x90P\x81\x10\x15a6\x91W_\x87\x87\x83\x81\x81\x10a5\xA1Wa5\xA0a]+V[[\x90P`@\x02\x01_\x015\x90P_\x88\x88\x84\x81\x81\x10a5\xC0Wa5\xBFa]+V[[\x90P`@\x02\x01` \x01` \x81\x01\x90a5\xD8\x91\x90ac!V[\x90P_a5\xE4\x83a?DV[\x90Pa5\xEF\x81a?\xCEV[a\xFF\xFF\x16\x85a5\xFE\x91\x90an\xEFV[\x94Pa6\n\x83\x88aA\xB9V[a6\x14\x83\x83aA\xB9V[a6\x1E\x88\x83a4uV[a6aW\x81\x88`@Q\x7F\xA4\xC3\x03\x91\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\x81R`\x04\x01a6X\x92\x91\x90aovV[`@Q\x80\x91\x03\x90\xFD[\x82\x86\x85\x81Q\x81\x10a6uWa6ta]+V[[` \x02` \x01\x01\x81\x81RPPPPP\x80\x80`\x01\x01\x91PPa5\x82V[Pa\x08\0\x81\x11\x15a6\xDDWa\x08\0\x81`@Q\x7F\xE7\xF4\x89]\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\x81R`\x04\x01a6\xD4\x92\x91\x90an\x87V[`@Q\x80\x91\x03\x90\xFD[P\x94\x93PPPPV[s\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c+\x13Y\x1C\x85\x85\x85\x85`@Q\x85c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a79\x94\x93\x92\x91\x90aj\xCDV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a7TW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a7x\x91\x90aY\xBDV[a7\xBFW\x83\x83\x83\x83`@Q\x7F\x08\n\x11?\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\x81R`\x04\x01a7\xB6\x94\x93\x92\x91\x90aj\xCDV[`@Q\x80\x91\x03\x90\xFD[PPPPV[_a7\xD0\x86\x83aB\x8EV[\x90P_a8 \x82\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa;,V[\x90P\x85s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a8\x94W\x84\x84`@Q\x7F*\x87='\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\x81R`\x04\x01a8\x8B\x92\x91\x90ao\xA4V[`@Q\x80\x91\x03\x90\xFD[PPPPPPPV[`\x01\x81Q\x11\x15a9\x80W_\x81_\x81Q\x81\x10a8\xBBWa8\xBAa]+V[[` \x02` \x01\x01Q` \x01Q\x90P_`\x01\x90P[\x82Q\x81\x10\x15a9}W\x81\x83\x82\x81Q\x81\x10a8\xECWa8\xEBa]+V[[` \x02` \x01\x01Q` \x01Q\x14a9pW\x82_\x81Q\x81\x10a9\x10Wa9\x0Fa]+V[[` \x02` \x01\x01Q\x83\x82\x81Q\x81\x10a9+Wa9*a]+V[[` \x02` \x01\x01Q`@Q\x7F\xCF\xAE\x92\x1F\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\x81R`\x04\x01a9g\x92\x91\x90ap&V[`@Q\x80\x91\x03\x90\xFD[\x80\x80`\x01\x01\x91PPa8\xCFV[PP[PV[_\x80[\x82Q\x81\x10\x15a9\xEBW_\x83\x82\x81Q\x81\x10a9\xA3Wa9\xA2a]+V[[` \x02` \x01\x01Q\x90P_a9\xB7\x82a?DV[\x90Pa9\xC2\x81a?\xCEV[a\xFF\xFF\x16\x84a9\xD1\x91\x90an\xEFV[\x93Pa9\xDC\x82aCaV[PP\x80\x80`\x01\x01\x91PPa9\x86V[Pa\x08\0\x81\x11\x15a:7Wa\x08\0\x81`@Q\x7F\xE7\xF4\x89]\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\x81R`\x04\x01a:.\x92\x91\x90an\x87V[`@Q\x80\x91\x03\x90\xFD[PPV[_a:F\x86\x83aD1V[\x90P_a:\x96\x82\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa;,V[\x90P\x85s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a;\nW\x84\x84`@Q\x7F*\x87='\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\x81R`\x04\x01a;\x01\x92\x91\x90ao\xA4V[`@Q\x80\x91\x03\x90\xFD[PPPPPPPV[_a;%a;\x1FaD\xFEV[\x83aE\x0CV[\x90P\x91\x90PV[_\x80_\x80a;:\x86\x86aELV[\x92P\x92P\x92Pa;J\x82\x82aE\xA1V[\x82\x93PPPP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c =\x01\x14\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a;\xA3\x91\x90aYzV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a;\xBEW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a;\xE2\x91\x90aY\xBDV[a<#W\x80`@Q\x7F*|n\xF6\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\x81R`\x04\x01a<\x1A\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[PV[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a<\x82Wz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a\x10a=wV[_a>\x19a/\xA5V[\x90P_\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPPV[a>@a\x0F\xACV[a>vW`@Q\x7F\x8D\xFC +\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_3\x90P\x90V[_a>\xAB\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1BaG!V[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a>\xDB\x82aG*V[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a?7Wa?1\x82\x82aG\xF3V[Pa?@V[a??aHsV[[PPV[_\x80`\xF8`\xF0\x84\x90\x1B\x90\x1C_\x1C\x90P`S\x80\x81\x11\x15a?fWa?eaY\xE8V[[`\xFF\x16\x81`\xFF\x16\x11\x15a?\xB0W\x80`@Q\x7Fd\x19P\xD7\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\x81R`\x04\x01a?\xA7\x91\x90aq\x91V[`@Q\x80\x91\x03\x90\xFD[\x80`\xFF\x16`S\x81\x11\x15a?\xC6Wa?\xC5aY\xE8V[[\x91PP\x91\x90PV[_\x80`S\x81\x11\x15a?\xE2Wa?\xE1aY\xE8V[[\x82`S\x81\x11\x15a?\xF5Wa?\xF4aY\xE8V[[\x03a@\x03W`\x02\x90PaA\xB4V[`\x02`S\x81\x11\x15a@\x17Wa@\x16aY\xE8V[[\x82`S\x81\x11\x15a@*Wa@)aY\xE8V[[\x03a@8W`\x08\x90PaA\xB4V[`\x03`S\x81\x11\x15a@LWa@KaY\xE8V[[\x82`S\x81\x11\x15a@_Wa@^aY\xE8V[[\x03a@mW`\x10\x90PaA\xB4V[`\x04`S\x81\x11\x15a@\x81Wa@\x80aY\xE8V[[\x82`S\x81\x11\x15a@\x94Wa@\x93aY\xE8V[[\x03a@\xA2W` \x90PaA\xB4V[`\x05`S\x81\x11\x15a@\xB6Wa@\xB5aY\xE8V[[\x82`S\x81\x11\x15a@\xC9Wa@\xC8aY\xE8V[[\x03a@\xD7W`@\x90PaA\xB4V[`\x06`S\x81\x11\x15a@\xEBWa@\xEAaY\xE8V[[\x82`S\x81\x11\x15a@\xFEWa@\xFDaY\xE8V[[\x03aA\x0CW`\x80\x90PaA\xB4V[`\x07`S\x81\x11\x15aA WaA\x1FaY\xE8V[[\x82`S\x81\x11\x15aA3WaA2aY\xE8V[[\x03aAAW`\xA0\x90PaA\xB4V[`\x08`S\x81\x11\x15aAUWaATaY\xE8V[[\x82`S\x81\x11\x15aAhWaAgaY\xE8V[[\x03aAwWa\x01\0\x90PaA\xB4V[\x81`@Q\x7F\xBEx0\xB1\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\x81R`\x04\x01aA\xAB\x91\x90aq\xF0V[`@Q\x80\x91\x03\x90\xFD[\x91\x90PV[s\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC6R\x8Fi\x83\x83`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01aB\x08\x92\x91\x90ak\x0BV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15aB#W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90aBG\x91\x90aY\xBDV[aB\x8AW\x81\x81`@Q\x7F\x16\n+K\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\x81R`\x04\x01aB\x81\x92\x91\x90ak\x0BV[`@Q\x80\x91\x03\x90\xFD[PPV[_\x80`@Q\x80`\xE0\x01`@R\x80`\xA9\x81R` \x01auT`\xA9\x919\x80Q\x90` \x01 \x84_\x01Q\x80Q\x90` \x01 \x85` \x01Q`@Q` \x01aB\xD0\x91\x90ar\x95V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x86`@\x01Q\x87``\x01Q\x88`\x80\x01Q\x89`\xA0\x01Q`@Q` \x01aC\n\x91\x90al\xCFV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01aC6\x97\x96\x95\x94\x93\x92\x91\x90ar\xABV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90PaCX\x83\x82aH\xAFV[\x91PP\x92\x91PPV[s\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x06 2m\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01aC\xAE\x91\x90aR\xEBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15aC\xC9W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90aC\xED\x91\x90aY\xBDV[aD.W\x80`@Q\x7FC1\xA8]\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\x81R`\x04\x01aD%\x91\x90aR\xEBV[`@Q\x80\x91\x03\x90\xFD[PV[_\x80`@Q\x80`\xC0\x01`@R\x80`\x87\x81R` \x01at\xCD`\x87\x919\x80Q\x90` \x01 \x84_\x01Q\x80Q\x90` \x01 \x85` \x01Q`@Q` \x01aDs\x91\x90ar\x95V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x86`@\x01Q\x87``\x01Q\x88`\x80\x01Q`@Q` \x01aD\xA8\x91\x90al\xCFV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01aD\xD3\x96\x95\x94\x93\x92\x91\x90as\x18V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90PaD\xF5\x83\x82aH\xAFV[\x91PP\x92\x91PPV[_aE\x07aI#V[\x90P\x90V[_`@Q\x7F\x19\x01\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\x81R\x83`\x02\x82\x01R\x82`\"\x82\x01R`B\x81 \x91PP\x92\x91PPV[_\x80_`A\x84Q\x03aE\x8CW_\x80_` \x87\x01Q\x92P`@\x87\x01Q\x91P``\x87\x01Q_\x1A\x90PaE~\x88\x82\x85\x85aI\x86V[\x95P\x95P\x95PPPPaE\x9AV[_`\x02\x85Q_\x1B\x92P\x92P\x92P[\x92P\x92P\x92V[_`\x03\x81\x11\x15aE\xB4WaE\xB3aY\xE8V[[\x82`\x03\x81\x11\x15aE\xC7WaE\xC6aY\xE8V[[\x03\x15aF\xFFW`\x01`\x03\x81\x11\x15aE\xE1WaE\xE0aY\xE8V[[\x82`\x03\x81\x11\x15aE\xF4WaE\xF3aY\xE8V[[\x03aF+W`@Q\x7F\xF6E\xEE\xDF\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02`\x03\x81\x11\x15aF?WaF>aY\xE8V[[\x82`\x03\x81\x11\x15aFRWaFQaY\xE8V[[\x03aF\x96W\x80_\x1C`@Q\x7F\xFC\xE6\x98\xF7\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\x81R`\x04\x01aF\x8D\x91\x90aZ\x15V[`@Q\x80\x91\x03\x90\xFD[`\x03\x80\x81\x11\x15aF\xA9WaF\xA8aY\xE8V[[\x82`\x03\x81\x11\x15aF\xBCWaF\xBBaY\xE8V[[\x03aF\xFEW\x80`@Q\x7F\xD7\x8B\xCE\x0C\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\x81R`\x04\x01aF\xF5\x91\x90aR\xEBV[`@Q\x80\x91\x03\x90\xFD[[PPV[_aG\x0Ca+jV[_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x90P\x90V[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03aG\x85W\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01aG|\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[\x80aG\xB1\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1BaG!V[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@QaH\x1C\x91\x90al\xCFV[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14aHTW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>aHYV[``\x91P[P\x91P\x91PaHi\x85\x83\x83aJmV[\x92PPP\x92\x91PPV[_4\x11\x15aH\xADW`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x80\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0FaH\xDAaJ\xFAV[aH\xE2aKpV[\x860`@Q` \x01aH\xF8\x95\x94\x93\x92\x91\x90aswV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90PaI\x1A\x81\x84aE\x0CV[\x91PP\x92\x91PPV[_\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0FaIMaJ\xFAV[aIUaKpV[F0`@Q` \x01aIk\x95\x94\x93\x92\x91\x90aswV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x90V[_\x80_\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF]WnsW\xA4P\x1D\xDF\xE9/Fh\x1B \xA0\x84_\x1C\x11\x15aI\xC2W_`\x03\x85\x92P\x92P\x92PaJcV[_`\x01\x88\x88\x88\x88`@Q_\x81R` \x01`@R`@QaI\xE5\x94\x93\x92\x91\x90as\xC8V[` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15aJ\x05W=_\x80>=_\xFD[PPP` `@Q\x03Q\x90P_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x03aJVW_`\x01_\x80\x1B\x93P\x93P\x93PPaJcV[\x80_\x80_\x1B\x93P\x93P\x93PP[\x94P\x94P\x94\x91PPV[``\x82aJ\x82WaJ}\x82aK\xE7V[aJ\xF2V[_\x82Q\x14\x80\x15aJ\xA8WP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15aJ\xEAW\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01aJ\xE1\x91\x90aYzV[`@Q\x80\x91\x03\x90\xFD[\x81\x90PaJ\xF3V[[\x93\x92PPPV[_\x80aK\x04a1\x86V[\x90P_aK\x0Fa1\xADV[\x90P_\x81Q\x11\x15aK+W\x80\x80Q\x90` \x01 \x92PPPaKmV[_\x82_\x01T\x90P_\x80\x1B\x81\x14aKFW\x80\x93PPPPaKmV[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x80aKza1\x86V[\x90P_aK\x85a2KV[\x90P_\x81Q\x11\x15aK\xA1W\x80\x80Q\x90` \x01 \x92PPPaK\xE4V[_\x82`\x01\x01T\x90P_\x80\x1B\x81\x14aK\xBDW\x80\x93PPPPaK\xE4V[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x81Q\x11\x15aK\xF9W\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x82\x80T\x82\x82U\x90_R` _ \x90\x81\x01\x92\x82\x15aLeW\x91` \x02\x82\x01[\x82\x81\x11\x15aLdW\x82Q\x82U\x91` \x01\x91\x90`\x01\x01\x90aLIV[[P\x90PaLr\x91\x90aL\xC1V[P\x90V[\x82\x80T\x82\x82U\x90_R` _ \x90\x81\x01\x92\x82\x15aL\xB0W\x91` \x02\x82\x01[\x82\x81\x11\x15aL\xAFW\x825\x82U\x91` \x01\x91\x90`\x01\x01\x90aL\x94V[[P\x90PaL\xBD\x91\x90aL\xC1V[P\x90V[[\x80\x82\x11\x15aL\xD8W_\x81_\x90UP`\x01\x01aL\xC2V[P\x90V[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[aL\xFF\x81aL\xEDV[\x81\x14aM\tW_\x80\xFD[PV[_\x815\x90PaM\x1A\x81aL\xF6V[\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12aMAWaM@aM V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aM^WaM]aM$V[[` \x83\x01\x91P\x83`\x01\x82\x02\x83\x01\x11\x15aMzWaMyaM(V[[\x92P\x92\x90PV[_\x80_\x80_\x80_`\x80\x88\x8A\x03\x12\x15aM\x9CWaM\x9BaL\xE5V[[_aM\xA9\x8A\x82\x8B\x01aM\x0CV[\x97PP` \x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aM\xCAWaM\xC9aL\xE9V[[aM\xD6\x8A\x82\x8B\x01aM,V[\x96P\x96PP`@\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aM\xF9WaM\xF8aL\xE9V[[aN\x05\x8A\x82\x8B\x01aM,V[\x94P\x94PP``\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aN(WaN'aL\xE9V[[aN4\x8A\x82\x8B\x01aM,V[\x92P\x92PP\x92\x95\x98\x91\x94\x97P\x92\x95PV[_` \x82\x84\x03\x12\x15aNZWaNYaL\xE5V[[_aNg\x84\x82\x85\x01aM\x0CV[\x91PP\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_aN\xC2\x82aN\x99V[\x90P\x91\x90PV[aN\xD2\x81aN\xB8V[\x82RPPV[_aN\xE3\x83\x83aN\xC9V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aO\x05\x82aNpV[aO\x0F\x81\x85aNzV[\x93PaO\x1A\x83aN\x8AV[\x80_[\x83\x81\x10\x15aOJW\x81QaO1\x88\x82aN\xD8V[\x97PaO<\x83aN\xEFV[\x92PP`\x01\x81\x01\x90PaO\x1DV[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01RaOo\x81\x84aN\xFBV[\x90P\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15aO\xAEW\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90PaO\x93V[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_aO\xD3\x82aOwV[aO\xDD\x81\x85aO\x81V[\x93PaO\xED\x81\x85` \x86\x01aO\x91V[aO\xF6\x81aO\xB9V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01RaP\x19\x81\x84aO\xC9V[\x90P\x92\x91PPV[_\x80\x83`\x1F\x84\x01\x12aP6WaP5aM V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aPSWaPRaM$V[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15aPoWaPnaM(V[[\x92P\x92\x90PV[_\x80_\x80`@\x85\x87\x03\x12\x15aP\x8EWaP\x8DaL\xE5V[[_\x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aP\xABWaP\xAAaL\xE9V[[aP\xB7\x87\x82\x88\x01aP!V[\x94P\x94PP` \x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aP\xDAWaP\xD9aL\xE9V[[aP\xE6\x87\x82\x88\x01aM,V[\x92P\x92PP\x92\x95\x91\x94P\x92PV[_\x81\x15\x15\x90P\x91\x90PV[aQ\x08\x81aP\xF4V[\x82RPPV[_` \x82\x01\x90PaQ!_\x83\x01\x84aP\xFFV[\x92\x91PPV[aQ0\x81aN\xB8V[\x81\x14aQ:W_\x80\xFD[PV[_\x815\x90PaQK\x81aQ'V[\x92\x91PPV[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[aQ\x8B\x82aO\xB9V[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15aQ\xAAWaQ\xA9aQUV[[\x80`@RPPPV[_aQ\xBCaL\xDCV[\x90PaQ\xC8\x82\x82aQ\x82V[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aQ\xE7WaQ\xE6aQUV[[aQ\xF0\x82aO\xB9V[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_aR\x1DaR\x18\x84aQ\xCDV[aQ\xB3V[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15aR9WaR8aQQV[[aRD\x84\x82\x85aQ\xFDV[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12aR`WaR_aM V[[\x815aRp\x84\x82` \x86\x01aR\x0BV[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15aR\x8FWaR\x8EaL\xE5V[[_aR\x9C\x85\x82\x86\x01aQ=V[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aR\xBDWaR\xBCaL\xE9V[[aR\xC9\x85\x82\x86\x01aRLV[\x91PP\x92P\x92\x90PV[_\x81\x90P\x91\x90PV[aR\xE5\x81aR\xD3V[\x82RPPV[_` \x82\x01\x90PaR\xFE_\x83\x01\x84aR\xDCV[\x92\x91PPV[_\x7F\xFF\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\x82\x16\x90P\x91\x90PV[aS8\x81aS\x04V[\x82RPPV[aSG\x81aL\xEDV[\x82RPPV[aSV\x81aN\xB8V[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[aS\x8E\x81aL\xEDV[\x82RPPV[_aS\x9F\x83\x83aS\x85V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aS\xC1\x82aS\\V[aS\xCB\x81\x85aSfV[\x93PaS\xD6\x83aSvV[\x80_[\x83\x81\x10\x15aT\x06W\x81QaS\xED\x88\x82aS\x94V[\x97PaS\xF8\x83aS\xABV[\x92PP`\x01\x81\x01\x90PaS\xD9V[P\x85\x93PPPP\x92\x91PPV[_`\xE0\x82\x01\x90PaT&_\x83\x01\x8AaS/V[\x81\x81\x03` \x83\x01RaT8\x81\x89aO\xC9V[\x90P\x81\x81\x03`@\x83\x01RaTL\x81\x88aO\xC9V[\x90PaT[``\x83\x01\x87aS>V[aTh`\x80\x83\x01\x86aSMV[aTu`\xA0\x83\x01\x85aR\xDCV[\x81\x81\x03`\xC0\x83\x01RaT\x87\x81\x84aS\xB7V[\x90P\x98\x97PPPPPPPPV[_\x80\x83`\x1F\x84\x01\x12aT\xAAWaT\xA9aM V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aT\xC7WaT\xC6aM$V[[` \x83\x01\x91P\x83`@\x82\x02\x83\x01\x11\x15aT\xE3WaT\xE2aM(V[[\x92P\x92\x90PV[_\x80\xFD[_`@\x82\x84\x03\x12\x15aU\x03WaU\x02aT\xEAV[[\x81\x90P\x92\x91PPV[_`@\x82\x84\x03\x12\x15aU!WaU aT\xEAV[[\x81\x90P\x92\x91PPV[_`@\x82\x84\x03\x12\x15aU?WaU>aT\xEAV[[\x81\x90P\x92\x91PPV[_\x80_\x80_\x80_\x80_\x80_a\x01 \x8C\x8E\x03\x12\x15aUhWaUgaL\xE5V[[_\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aU\x85WaU\x84aL\xE9V[[aU\x91\x8E\x82\x8F\x01aT\x95V[\x9BP\x9BPP` aU\xA4\x8E\x82\x8F\x01aT\xEEV[\x99PP``aU\xB5\x8E\x82\x8F\x01aU\x0CV[\x98PP`\xA0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aU\xD6WaU\xD5aL\xE9V[[aU\xE2\x8E\x82\x8F\x01aU*V[\x97PP`\xC0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aV\x03WaV\x02aL\xE9V[[aV\x0F\x8E\x82\x8F\x01aM,V[\x96P\x96PP`\xE0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aV2WaV1aL\xE9V[[aV>\x8E\x82\x8F\x01aM,V[\x94P\x94PPa\x01\0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aVbWaVaaL\xE9V[[aVn\x8E\x82\x8F\x01aM,V[\x92P\x92PP\x92\x95\x98\x9BP\x92\x95\x98\x9B\x90\x93\x96\x99PV[_\x80\x83`\x1F\x84\x01\x12aV\x98WaV\x97aM V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aV\xB5WaV\xB4aM$V[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15aV\xD1WaV\xD0aM(V[[\x92P\x92\x90PV[_\x80_\x80_\x80_\x80`\xC0\x89\x8B\x03\x12\x15aV\xF4WaV\xF3aL\xE5V[[_aW\x01\x8B\x82\x8C\x01aM\x0CV[\x98PP` aW\x12\x8B\x82\x8C\x01aU\x0CV[\x97PP``\x89\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aW3WaW2aL\xE9V[[aW?\x8B\x82\x8C\x01aT\x95V[\x96P\x96PP`\x80\x89\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aWbWaWaaL\xE9V[[aWn\x8B\x82\x8C\x01aV\x83V[\x94P\x94PP`\xA0\x89\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aW\x91WaW\x90aL\xE9V[[aW\x9D\x8B\x82\x8C\x01aM,V[\x92P\x92PP\x92\x95\x98P\x92\x95\x98\x90\x93\x96PV[_\x80_\x80_\x80_\x80_\x80_a\x01\0\x8C\x8E\x03\x12\x15aW\xCFWaW\xCEaL\xE5V[[_\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aW\xECWaW\xEBaL\xE9V[[aW\xF8\x8E\x82\x8F\x01aT\x95V[\x9BP\x9BPP` aX\x0B\x8E\x82\x8F\x01aT\xEEV[\x99PP``\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aX,WaX+aL\xE9V[[aX8\x8E\x82\x8F\x01aU*V[\x98PP`\x80aXI\x8E\x82\x8F\x01aQ=V[\x97PP`\xA0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aXjWaXiaL\xE9V[[aXv\x8E\x82\x8F\x01aM,V[\x96P\x96PP`\xC0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aX\x99WaX\x98aL\xE9V[[aX\xA5\x8E\x82\x8F\x01aM,V[\x94P\x94PP`\xE0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aX\xC8WaX\xC7aL\xE9V[[aX\xD4\x8E\x82\x8F\x01aM,V[\x92P\x92PP\x92\x95\x98\x9BP\x92\x95\x98\x9B\x90\x93\x96\x99PV[_\x80_\x80_``\x86\x88\x03\x12\x15aY\x02WaY\x01aL\xE5V[[_aY\x0F\x88\x82\x89\x01aQ=V[\x95PP` \x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aY0WaY/aL\xE9V[[aY<\x88\x82\x89\x01aT\x95V[\x94P\x94PP`@\x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aY_WaY^aL\xE9V[[aYk\x88\x82\x89\x01aM,V[\x92P\x92PP\x92\x95P\x92\x95\x90\x93PV[_` \x82\x01\x90PaY\x8D_\x83\x01\x84aSMV[\x92\x91PPV[aY\x9C\x81aP\xF4V[\x81\x14aY\xA6W_\x80\xFD[PV[_\x81Q\x90PaY\xB7\x81aY\x93V[\x92\x91PPV[_` \x82\x84\x03\x12\x15aY\xD2WaY\xD1aL\xE5V[[_aY\xDF\x84\x82\x85\x01aY\xA9V[\x91PP\x92\x91PPV[\x7FNH{q\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_R`!`\x04R`$_\xFD[_` \x82\x01\x90PaZ(_\x83\x01\x84aS>V[\x92\x91PPV[\x7FNH{q\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_R`\"`\x04R`$_\xFD[_`\x02\x82\x04\x90P`\x01\x82\x16\x80aZrW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03aZ\x85WaZ\x84aZ.V[[P\x91\x90PV[\x7FNH{q\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_R`\x11`\x04R`$_\xFD[_aZ\xC2\x82aL\xEDV[\x91PaZ\xCD\x83aL\xEDV[\x92P\x82\x82\x03\x90P\x81\x81\x11\x15aZ\xE5WaZ\xE4aZ\x8BV[[\x92\x91PPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_a[\x06\x83\x85aZ\xEBV[\x93Pa[\x13\x83\x85\x84aQ\xFDV[a[\x1C\x83aO\xB9V[\x84\x01\x90P\x93\x92PPPV[_`\x80\x82\x01\x90Pa[:_\x83\x01\x8AaS>V[\x81\x81\x03` \x83\x01Ra[M\x81\x88\x8AaZ\xFBV[\x90P\x81\x81\x03`@\x83\x01Ra[b\x81\x86\x88aZ\xFBV[\x90P\x81\x81\x03``\x83\x01Ra[w\x81\x84\x86aZ\xFBV[\x90P\x98\x97PPPPPPPPV[_\x81\x90P\x92\x91PPV[_a[\x99\x82aOwV[a[\xA3\x81\x85a[\x85V[\x93Pa[\xB3\x81\x85` \x86\x01aO\x91V[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_a[\xF3`\x02\x83a[\x85V[\x91Pa[\xFE\x82a[\xBFV[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_a\\=`\x01\x83a[\x85V[\x91Pa\\H\x82a\\\tV[`\x01\x82\x01\x90P\x91\x90PV[_a\\^\x82\x87a[\x8FV[\x91Pa\\i\x82a[\xE7V[\x91Pa\\u\x82\x86a[\x8FV[\x91Pa\\\x80\x82a\\1V[\x91Pa\\\x8C\x82\x85a[\x8FV[\x91Pa\\\x97\x82a\\1V[\x91Pa\\\xA3\x82\x84a[\x8FV[\x91P\x81\x90P\x95\x94PPPPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[a\\\xCD\x81a\\\xB1V[\x82RPPV[_` \x82\x01\x90Pa\\\xE6_\x83\x01\x84a\\\xC4V[\x92\x91PPV[_\x81Q\x90Pa\\\xFA\x81aQ'V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a]\x15Wa]\x14aL\xE5V[[_a]\"\x84\x82\x85\x01a\\\xECV[\x91PP\x92\x91PPV[\x7FNH{q\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_R`2`\x04R`$_\xFD[_\x82\x90P\x92\x91PPV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_` `\x1F\x83\x01\x04\x90P\x91\x90PV[_\x82\x82\x1B\x90P\x92\x91PPV[_`\x08\x83\x02a]\xBE\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82a]\x83V[a]\xC8\x86\x83a]\x83V[\x95P\x80\x19\x84\x16\x93P\x80\x86\x16\x84\x17\x92PPP\x93\x92PPPV[_\x81\x90P\x91\x90PV[_a^\x03a]\xFEa]\xF9\x84aL\xEDV[a]\xE0V[aL\xEDV[\x90P\x91\x90PV[_\x81\x90P\x91\x90PV[a^\x1C\x83a]\xE9V[a^0a^(\x82a^\nV[\x84\x84Ta]\x8FV[\x82UPPPPV[_\x90V[a^Da^8V[a^O\x81\x84\x84a^\x13V[PPPV[[\x81\x81\x10\x15a^rWa^g_\x82a^V[a]\xE0V[aL\xEDV[\x90P\x91\x90PV[abt\x81abJV[\x82RPPV[_`@\x82\x01\x90Pab\x8D_\x83\x01\x85abkV[ab\x9A` \x83\x01\x84aS>V[\x93\x92PPPV[_\x80\xFD[_\x80\xFD[_`@\x82\x84\x03\x12\x15ab\xBEWab\xBDab\xA1V[[ab\xC8`@aQ\xB3V[\x90P_ab\xD7\x84\x82\x85\x01aM\x0CV[_\x83\x01RP` ab\xEA\x84\x82\x85\x01aM\x0CV[` \x83\x01RP\x92\x91PPV[_`@\x82\x84\x03\x12\x15ac\x0BWac\naL\xE5V[[_ac\x18\x84\x82\x85\x01ab\xA9V[\x91PP\x92\x91PPV[_` \x82\x84\x03\x12\x15ac6Wac5aL\xE5V[[_acC\x84\x82\x85\x01aQ=V[\x91PP\x92\x91PPV[_\x81\x90P\x91\x90PV[_acc` \x84\x01\x84aQ=V[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_ac\x82\x83\x85aNzV[\x93Pac\x8D\x82acLV[\x80_[\x85\x81\x10\x15ac\xC5Wac\xA2\x82\x84acUV[ac\xAC\x88\x82aN\xD8V[\x97Pac\xB7\x83ackV[\x92PP`\x01\x81\x01\x90Pac\x90V[P\x85\x92PPP\x93\x92PPPV[_`@\x82\x01\x90Pac\xE5_\x83\x01\x86aSMV[\x81\x81\x03` \x83\x01Rac\xF8\x81\x84\x86acwV[\x90P\x94\x93PPPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[ad4\x81aR\xD3V[\x82RPPV[_adE\x83\x83ad+V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_adg\x82ad\x02V[adq\x81\x85ad\x0CV[\x93Pad|\x83ad\x1CV[\x80_[\x83\x81\x10\x15ad\xACW\x81Qad\x93\x88\x82ad:V[\x97Pad\x9E\x83adQV[\x92PP`\x01\x81\x01\x90Pad\x7FV[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Rad\xD1\x81\x84ad]V[\x90P\x92\x91PPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15ad\xF3Wad\xF2aQUV[[` \x82\x02\x90P` \x81\x01\x90P\x91\x90PV[ae\r\x81aR\xD3V[\x81\x14ae\x17W_\x80\xFD[PV[_\x81Q\x90Pae(\x81ae\x04V[\x92\x91PPV[_\x81Q\x90Pae<\x81aL\xF6V[\x92\x91PPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15ae\\Wae[aQUV[[` \x82\x02\x90P` \x81\x01\x90P\x91\x90PV[_ae\x7Faez\x84aeBV[aQ\xB3V[\x90P\x80\x83\x82R` \x82\x01\x90P` \x84\x02\x83\x01\x85\x81\x11\x15ae\xA2Wae\xA1aM(V[[\x83[\x81\x81\x10\x15ae\xCBW\x80ae\xB7\x88\x82a\\\xECV[\x84R` \x84\x01\x93PP` \x81\x01\x90Pae\xA4V[PPP\x93\x92PPPV[_\x82`\x1F\x83\x01\x12ae\xE9Wae\xE8aM V[[\x81Qae\xF9\x84\x82` \x86\x01aemV[\x91PP\x92\x91PPV[_`\x80\x82\x84\x03\x12\x15af\x17Waf\x16ab\xA1V[[af!`\x80aQ\xB3V[\x90P_af0\x84\x82\x85\x01ae\x1AV[_\x83\x01RP` afC\x84\x82\x85\x01ae.V[` \x83\x01RP`@afW\x84\x82\x85\x01ae\x1AV[`@\x83\x01RP``\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15af{Wafzab\xA5V[[af\x87\x84\x82\x85\x01ae\xD5V[``\x83\x01RP\x92\x91PPV[_af\xA5af\xA0\x84ad\xD9V[aQ\xB3V[\x90P\x80\x83\x82R` \x82\x01\x90P` \x84\x02\x83\x01\x85\x81\x11\x15af\xC8Waf\xC7aM(V[[\x83[\x81\x81\x10\x15ag\x0FW\x80Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15af\xEDWaf\xECaM V[[\x80\x86\x01af\xFA\x89\x82af\x02V[\x85R` \x85\x01\x94PPP` \x81\x01\x90Paf\xCAV[PPP\x93\x92PPPV[_\x82`\x1F\x83\x01\x12ag-Wag,aM V[[\x81Qag=\x84\x82` \x86\x01af\x93V[\x91PP\x92\x91PPV[_` \x82\x84\x03\x12\x15ag[WagZaL\xE5V[[_\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15agxWagwaL\xE9V[[ag\x84\x84\x82\x85\x01ag\x19V[\x91PP\x92\x91PPV[_ag\x97\x82aL\xEDV[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03ag\xC9Wag\xC8aZ\x8BV[[`\x01\x82\x01\x90P\x91\x90PV[_\x81Q\x90P\x91\x90PV[ag\xE7\x82ag\xD4V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15ah\0Wag\xFFaQUV[[ah\n\x82TaZ[V[ah\x15\x82\x82\x85a^vV[_` \x90P`\x1F\x83\x11`\x01\x81\x14ahFW_\x84\x15ah4W\x82\x87\x01Q\x90P[ah>\x85\x82a^\xE4V[\x86UPah\xA5V[`\x1F\x19\x84\x16ahT\x86a]bV[_[\x82\x81\x10\x15ah{W\x84\x89\x01Q\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90PahVV[\x86\x83\x10\x15ah\x98W\x84\x89\x01Qah\x94`\x1F\x89\x16\x82a^\xC8V[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_ah\xF0\x82aNpV[ah\xFA\x81\x85ah\xD6V[\x93Pai\x05\x83aN\x8AV[\x80_[\x83\x81\x10\x15ai5W\x81Qai\x1C\x88\x82aN\xD8V[\x97Pai'\x83aN\xEFV[\x92PP`\x01\x81\x01\x90Pai\x08V[P\x85\x93PPPP\x92\x91PPV[_`\x80\x83\x01_\x83\x01QaiW_\x86\x01\x82ad+V[P` \x83\x01Qaij` \x86\x01\x82aS\x85V[P`@\x83\x01Qai}`@\x86\x01\x82ad+V[P``\x83\x01Q\x84\x82\x03``\x86\x01Rai\x95\x82\x82ah\xE6V[\x91PP\x80\x91PP\x92\x91PPV[_ai\xAD\x83\x83aiBV[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_ai\xCB\x82ah\xADV[ai\xD5\x81\x85ah\xB7V[\x93P\x83` \x82\x02\x85\x01ai\xE7\x85ah\xC7V[\x80_[\x85\x81\x10\x15aj\"W\x84\x84\x03\x89R\x81Qaj\x03\x85\x82ai\xA2V[\x94Paj\x0E\x83ai\xB5V[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90Pai\xEAV[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_`\x80\x82\x01\x90P\x81\x81\x03_\x83\x01RajL\x81\x89ai\xC1V[\x90Paj[` \x83\x01\x88aSMV[\x81\x81\x03`@\x83\x01Rajn\x81\x86\x88aZ\xFBV[\x90P\x81\x81\x03``\x83\x01Raj\x83\x81\x84\x86aZ\xFBV[\x90P\x97\x96PPPPPPPV[`@\x82\x01aj\xA0_\x83\x01\x83acUV[aj\xAC_\x85\x01\x82aN\xC9V[Paj\xBA` \x83\x01\x83acUV[aj\xC7` \x85\x01\x82aN\xC9V[PPPPV[_`\x80\x82\x01\x90Paj\xE0_\x83\x01\x87aS>V[aj\xED` \x83\x01\x86aj\x90V[\x81\x81\x03``\x83\x01Rak\0\x81\x84\x86acwV[\x90P\x95\x94PPPPPV[_`@\x82\x01\x90Pak\x1E_\x83\x01\x85aR\xDCV[ak+` \x83\x01\x84aSMV[\x93\x92PPPV[_\x80\xFD[\x82\x81\x837PPPV[_akJ\x83\x85ad\x0CV[\x93P\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x15ak}Wak|ak2V[[` \x83\x02\x92Pak\x8E\x83\x85\x84ak6V[\x82\x84\x01\x90P\x93\x92PPPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Rak\xB3\x81\x84\x86ak?V[\x90P\x93\x92PPPV[_`@\x82\x01\x90P\x81\x81\x03_\x83\x01Rak\xD4\x81\x86ai\xC1V[\x90P\x81\x81\x03` \x83\x01Rak\xE9\x81\x84\x86aZ\xFBV[\x90P\x94\x93PPPPV[_\x81\x90P\x92\x91PPV[al\x06\x81aR\xD3V[\x82RPPV[_al\x17\x83\x83ak\xFDV[` \x83\x01\x90P\x92\x91PPV[_al-\x82ad\x02V[al7\x81\x85ak\xF3V[\x93PalB\x83ad\x1CV[\x80_[\x83\x81\x10\x15alrW\x81QalY\x88\x82al\x0CV[\x97Pald\x83adQV[\x92PP`\x01\x81\x01\x90PalEV[P\x85\x93PPPP\x92\x91PPV[_al\x8A\x82\x84al#V[\x91P\x81\x90P\x92\x91PPV[_\x81\x90P\x92\x91PPV[_al\xA9\x82ag\xD4V[al\xB3\x81\x85al\x95V[\x93Pal\xC3\x81\x85` \x86\x01aO\x91V[\x80\x84\x01\x91PP\x92\x91PPV[_al\xDA\x82\x84al\x9FV[\x91P\x81\x90P\x92\x91PPV[_`\xA0\x82\x01\x90Pal\xF8_\x83\x01\x88aR\xDCV[am\x05` \x83\x01\x87aR\xDCV[am\x12`@\x83\x01\x86aR\xDCV[am\x1F``\x83\x01\x85aR\xDCV[am,`\x80\x83\x01\x84aR\xDCV[\x96\x95PPPPPPV[_`@\x82\x01\x90PamI_\x83\x01\x85aS>V[amV` \x83\x01\x84aSMV[\x93\x92PPPV[_` \x82\x84\x03\x12\x15amrWamqaL\xE5V[[_am\x7F\x84\x82\x85\x01ae.V[\x91PP\x92\x91PPV[\x7FNH{q\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_R`\x12`\x04R`$_\xFD[_` \x82\x84\x03\x12\x15am\xCAWam\xC9aL\xE5V[[_am\xD7\x84\x82\x85\x01ae\x1AV[\x91PP\x92\x91PPV[_`\x80\x82\x01\x90Pam\xF3_\x83\x01\x87aR\xDCV[an\0` \x83\x01\x86aR\xDCV[an\r`@\x83\x01\x85aR\xDCV[an\x1A``\x83\x01\x84aR\xDCV[\x95\x94PPPPPV[_a\xFF\xFF\x82\x16\x90P\x91\x90PV[_anJanEan@\x84an#V[a]\xE0V[aL\xEDV[\x90P\x91\x90PV[anZ\x81an0V[\x82RPPV[_`@\x82\x01\x90Pans_\x83\x01\x85anQV[an\x80` \x83\x01\x84aS>V[\x93\x92PPPV[_`@\x82\x01\x90Pan\x9A_\x83\x01\x85aS>V[an\xA7` \x83\x01\x84aS>V[\x93\x92PPPV[_an\xB8\x82aL\xEDV[\x91Pan\xC3\x83aL\xEDV[\x92P\x82\x82\x02an\xD1\x81aL\xEDV[\x91P\x82\x82\x04\x84\x14\x83\x15\x17an\xE8Wan\xE7aZ\x8BV[[P\x92\x91PPV[_an\xF9\x82aL\xEDV[\x91Pao\x04\x83aL\xEDV[\x92P\x82\x82\x01\x90P\x80\x82\x11\x15ao\x1CWao\x1BaZ\x8BV[[\x92\x91PPV[`@\x82\x01_\x82\x01Qao6_\x85\x01\x82aS\x85V[P` \x82\x01QaoI` \x85\x01\x82aS\x85V[PPPPV[_``\x82\x01\x90Paob_\x83\x01\x85aS>V[aoo` \x83\x01\x84ao\"V[\x93\x92PPPV[_`@\x82\x01\x90Pao\x89_\x83\x01\x85aSMV[\x81\x81\x03` \x83\x01Rao\x9B\x81\x84aN\xFBV[\x90P\x93\x92PPPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Rao\xBD\x81\x84\x86aZ\xFBV[\x90P\x93\x92PPPV[_`\x80\x83\x01_\x83\x01Qao\xDB_\x86\x01\x82ad+V[P` \x83\x01Qao\xEE` \x86\x01\x82aS\x85V[P`@\x83\x01Qap\x01`@\x86\x01\x82ad+V[P``\x83\x01Q\x84\x82\x03``\x86\x01Rap\x19\x82\x82ah\xE6V[\x91PP\x80\x91PP\x92\x91PPV[_`@\x82\x01\x90P\x81\x81\x03_\x83\x01Rap>\x81\x85ao\xC6V[\x90P\x81\x81\x03` \x83\x01RapR\x81\x84ao\xC6V[\x90P\x93\x92PPPV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[`\x1F\x82\x11\x15ap\xAEWap\x7F\x81ap[V[ap\x88\x84a]tV[\x81\x01` \x85\x10\x15ap\x97W\x81\x90P[ap\xABap\xA3\x85a]tV[\x83\x01\x82a^TV[PP[PPPV[ap\xBC\x82aOwV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15ap\xD5Wap\xD4aQUV[[ap\xDF\x82TaZ[V[ap\xEA\x82\x82\x85apmV[_` \x90P`\x1F\x83\x11`\x01\x81\x14aq\x1BW_\x84\x15aq\tW\x82\x87\x01Q\x90P[aq\x13\x85\x82a^\xE4V[\x86UPaqzV[`\x1F\x19\x84\x16aq)\x86ap[V[_[\x82\x81\x10\x15aqPW\x84\x89\x01Q\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90Paq+V[\x86\x83\x10\x15aqmW\x84\x89\x01Qaqi`\x1F\x89\x16\x82a^\xC8V[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPV[aq\x8B\x81ab>V[\x82RPPV[_` \x82\x01\x90Paq\xA4_\x83\x01\x84aq\x82V[\x92\x91PPV[`T\x81\x10aq\xBBWaq\xBAaY\xE8V[[PV[_\x81\x90Paq\xCB\x82aq\xAAV[\x91\x90PV[_aq\xDA\x82aq\xBEV[\x90P\x91\x90PV[aq\xEA\x81aq\xD0V[\x82RPPV[_` \x82\x01\x90Par\x03_\x83\x01\x84aq\xE1V[\x92\x91PPV[_\x81\x90P\x92\x91PPV[ar\x1C\x81aN\xB8V[\x82RPPV[_ar-\x83\x83ar\x13V[` \x83\x01\x90P\x92\x91PPV[_arC\x82aNpV[arM\x81\x85ar\tV[\x93ParX\x83aN\x8AV[\x80_[\x83\x81\x10\x15ar\x88W\x81Qaro\x88\x82ar\"V[\x97Parz\x83aN\xEFV[\x92PP`\x01\x81\x01\x90Par[V[P\x85\x93PPPP\x92\x91PPV[_ar\xA0\x82\x84ar9V[\x91P\x81\x90P\x92\x91PPV[_`\xE0\x82\x01\x90Par\xBE_\x83\x01\x8AaR\xDCV[ar\xCB` \x83\x01\x89aR\xDCV[ar\xD8`@\x83\x01\x88aR\xDCV[ar\xE5``\x83\x01\x87aSMV[ar\xF2`\x80\x83\x01\x86aS>V[ar\xFF`\xA0\x83\x01\x85aS>V[as\x0C`\xC0\x83\x01\x84aR\xDCV[\x98\x97PPPPPPPPV[_`\xC0\x82\x01\x90Pas+_\x83\x01\x89aR\xDCV[as8` \x83\x01\x88aR\xDCV[asE`@\x83\x01\x87aR\xDCV[asR``\x83\x01\x86aS>V[as_`\x80\x83\x01\x85aS>V[asl`\xA0\x83\x01\x84aR\xDCV[\x97\x96PPPPPPPV[_`\xA0\x82\x01\x90Pas\x8A_\x83\x01\x88aR\xDCV[as\x97` \x83\x01\x87aR\xDCV[as\xA4`@\x83\x01\x86aR\xDCV[as\xB1``\x83\x01\x85aS>V[as\xBE`\x80\x83\x01\x84aSMV[\x96\x95PPPPPPV[_`\x80\x82\x01\x90Pas\xDB_\x83\x01\x87aR\xDCV[as\xE8` \x83\x01\x86aq\x82V[as\xF5`@\x83\x01\x85aR\xDCV[at\x02``\x83\x01\x84aR\xDCV[\x95\x94PPPPPV\xFEUserDecryptResponseVerification(bytes publicKey,bytes32[] ctHandles,bytes userDecryptedShare,bytes extraData)PublicDecryptVerification(bytes32[] ctHandles,bytes decryptedResult,bytes extraData)UserDecryptRequestVerification(bytes publicKey,address[] contractAddresses,uint256 startTimestamp,uint256 durationDays,bytes extraData)DelegatedUserDecryptRequestVerification(bytes publicKey,address[] contractAddresses,address delegatorAddress,uint256 startTimestamp,uint256 durationDays,bytes extraData)", + b"`\x80`@R`\x046\x10a\0\xFDW_5`\xE0\x1C\x80cX\xF5\xB8\xAB\x11a\0\x94W\x80c\x84\xB0\x19n\x11a\0cW\x80c\x84\xB0\x19n\x14a\x02\xE1W\x80c\xAD<\xB1\xCC\x14a\x03\x11W\x80c\xD8\x99\x8FE\x14a\x03;W\x80c\xF1\xB5z\xDB\x14a\x03cW\x80c\xFB\xB82Y\x14a\x03\x8BWa\0\xFDV[\x80cX\xF5\xB8\xAB\x14a\x02=W\x80c\\\x97Z\xBB\x14a\x02yW\x80co\x89\x13\xBC\x14a\x02\xA3W\x80c\x84V\xCBY\x14a\x02\xCBWa\0\xFDV[\x80c?K\xA8:\x11a\0\xD0W\x80c?K\xA8:\x14a\x01\xA5W\x80c@\x14\xC4\xCD\x14a\x01\xBBW\x80cO\x1E\xF2\x86\x14a\x01\xF7W\x80cR\xD1\x90-\x14a\x02\x13Wa\0\xFDV[\x80c\x04o\x9E\xB3\x14a\x01\x01W\x80c\t\0\xCCi\x14a\x01)W\x80c\r\x8En,\x14a\x01eW\x80c9\xF78\x10\x14a\x01\x8FW[_\x80\xFD[4\x80\x15a\x01\x0CW_\x80\xFD[Pa\x01'`\x04\x806\x03\x81\x01\x90a\x01\"\x91\x90aB\x08V[a\x03\xC7V[\0[4\x80\x15a\x014W_\x80\xFD[Pa\x01O`\x04\x806\x03\x81\x01\x90a\x01J\x91\x90aB\xCCV[a\x08SV[`@Qa\x01\\\x91\x90aC\xDEV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01pW_\x80\xFD[Pa\x01ya\t$V[`@Qa\x01\x86\x91\x90aD\x88V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x9AW_\x80\xFD[Pa\x01\xA3a\t\x9FV[\0[4\x80\x15a\x01\xB0W_\x80\xFD[Pa\x01\xB9a\x0B\xD7V[\0[4\x80\x15a\x01\xC6W_\x80\xFD[Pa\x01\xE1`\x04\x806\x03\x81\x01\x90a\x01\xDC\x91\x90aD\xFDV[a\r\x1FV[`@Qa\x01\xEE\x91\x90aE\x95V[`@Q\x80\x91\x03\x90\xF3[a\x02\x11`\x04\x806\x03\x81\x01\x90a\x02\x0C\x91\x90aG\0V[a\x0E\xACV[\0[4\x80\x15a\x02\x1EW_\x80\xFD[Pa\x02'a\x0E\xCBV[`@Qa\x024\x91\x90aGrV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02HW_\x80\xFD[Pa\x02c`\x04\x806\x03\x81\x01\x90a\x02^\x91\x90aB\xCCV[a\x0E\xFCV[`@Qa\x02p\x91\x90aE\x95V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\x84W_\x80\xFD[Pa\x02\x8Da\x0F/V[`@Qa\x02\x9A\x91\x90aE\x95V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\xAEW_\x80\xFD[Pa\x02\xC9`\x04\x806\x03\x81\x01\x90a\x02\xC4\x91\x90aB\x08V[a\x0FQV[\0[4\x80\x15a\x02\xD6W_\x80\xFD[Pa\x02\xDFa\x13XV[\0[4\x80\x15a\x02\xECW_\x80\xFD[Pa\x02\xF5a\x14}V[`@Qa\x03\x08\x97\x96\x95\x94\x93\x92\x91\x90aH\x9AV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\x1CW_\x80\xFD[Pa\x03%a\x15\x86V[`@Qa\x032\x91\x90aD\x88V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03FW_\x80\xFD[Pa\x03a`\x04\x806\x03\x81\x01\x90a\x03\\\x91\x90aD\xFDV[a\x15\xBFV[\0[4\x80\x15a\x03nW_\x80\xFD[Pa\x03\x89`\x04\x806\x03\x81\x01\x90a\x03\x84\x91\x90aI\xB1V[a\x17}V[\0[4\x80\x15a\x03\x96W_\x80\xFD[Pa\x03\xB1`\x04\x806\x03\x81\x01\x90a\x03\xAC\x91\x90aJ\xEBV[a\x1C.V[`@Qa\x03\xBE\x91\x90aE\x95V[`@Q\x80\x91\x03\x90\xF3[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x04\x14\x91\x90aK|V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04/W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04S\x91\x90aK\xBFV[a\x04\x94W3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x04\x8B\x91\x90aK|V[`@Q\x80\x91\x03\x90\xFD[_a\x04\x9Da\x1E\x9DV[\x90P`\xF8`\x02`\x05\x81\x11\x15a\x04\xB5Wa\x04\xB4aK\xEAV[[\x90\x1B\x88\x11\x15\x80a\x04\xC8WP\x80`\x08\x01T\x88\x11[\x15a\x05\nW\x87`@Q\x7F\xD4\x8A\xF9B\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\x81R`\x04\x01a\x05\x01\x91\x90aL\x17V[`@Q\x80\x91\x03\x90\xFD[_\x81`\x07\x01_\x8A\x81R` \x01\x90\x81R` \x01_ `@Q\x80`@\x01`@R\x90\x81_\x82\x01\x80Ta\x058\x90aL]V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x05d\x90aL]V[\x80\x15a\x05\xAFW\x80`\x1F\x10a\x05\x86Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x05\xAFV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x05\x92W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81R` \x01`\x01\x82\x01\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x06\x05W` \x02\x82\x01\x91\x90_R` _ \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x05\xF1W[PPPPP\x81RPP\x90P_`@Q\x80`\x80\x01`@R\x80\x83_\x01Q\x81R` \x01\x83` \x01Q\x81R` \x01\x8A\x8A\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90P_a\x06\xCB\x82a\x1E\xC4V[\x90Pa\x06\xD9\x8B\x82\x8A\x8Aa\x1F\x8BV[_\x84`\x02\x01_\x8D\x81R` \x01\x90\x81R` \x01_ _\x80_\x1B\x81R` \x01\x90\x81R` \x01_ \x90P\x803\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x8B\x7F\x7F\xCD\xFBS\x81\x91\x7FUJq}\nTp\xA3?ZI\xBAdE\xF0^\xC4a\x1E\x9DV[\x90P`\xF8`\x01`\x05\x81\x11\x15a\x0BVWa\x0BUaK\xEAV[[\x90\x1B\x81`\x06\x01\x81\x90UP`\xF8`\x02`\x05\x81\x11\x15a\x0BvWa\x0BuaK\xEAV[[\x90\x1B\x81`\x08\x01\x81\x90UPP_\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x82`@Qa\x0B\xCB\x91\x90aN\xD5V[`@Q\x80\x91\x03\x90\xA1PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0C4W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0CX\x91\x90aO\x02V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15\x80\x15a\x0C\xD3WPs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\r\x15W3`@Q\x7F\xE1\x91f\xEE\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\x81R`\x04\x01a\r\x0C\x91\x90aK|V[`@Q\x80\x91\x03\x90\xFD[a\r\x1Da\"\xCAV[V[_\x80_\x90P[\x85\x85\x90P\x81\x10\x15a\x0E\x9EWs\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x06 2m\x87\x87\x84\x81\x81\x10a\rsWa\rraO-V[[\x90P` \x02\x015`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\r\x96\x91\x90aGrV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\r\xB1W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\r\xD5\x91\x90aK\xBFV[\x15\x80a\x0E\x83WPs\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xDC\x9Ao\x87\x87\x84\x81\x81\x10a\x0E\x1FWa\x0E\x1EaO-V[[\x90P` \x02\x015`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0EB\x91\x90aGrV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E]W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0E\x81\x91\x90aK\xBFV[\x15[\x15a\x0E\x91W_\x91PPa\x0E\xA4V[\x80\x80`\x01\x01\x91PPa\r%V[P`\x01\x90P[\x94\x93PPPPV[a\x0E\xB4a#8V[a\x0E\xBD\x82a$\x1EV[a\x0E\xC7\x82\x82a%\x11V[PPV[_a\x0E\xD4a&/V[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[_\x80a\x0F\x06a\x1E\x9DV[\x90P\x80_\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[_\x80a\x0F9a&\xB6V[\x90P\x80_\x01_\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x90V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0F\x9E\x91\x90aK|V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0F\xB9W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0F\xDD\x91\x90aK\xBFV[a\x10\x1EW3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x10\x15\x91\x90aK|V[`@Q\x80\x91\x03\x90\xFD[_a\x10'a\x1E\x9DV[\x90P`\xF8`\x01`\x05\x81\x11\x15a\x10?Wa\x10>aK\xEAV[[\x90\x1B\x88\x11\x15\x80a\x10RWP\x80`\x06\x01T\x88\x11[\x15a\x10\x94W\x87`@Q\x7F\xD4\x8A\xF9B\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\x81R`\x04\x01a\x10\x8B\x91\x90aL\x17V[`@Q\x80\x91\x03\x90\xFD[_`@Q\x80``\x01`@R\x80\x83`\x05\x01_\x8C\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x10\xFBW` \x02\x82\x01\x91\x90_R` _ \x90[\x81T\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x10\xE7W[PPPPP\x81R` \x01\x89\x89\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x85\x85\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90P_a\x11\xA1\x82a&\xDDV[\x90Pa\x11\xAF\x8A\x82\x89\x89a\x1F\x8BV[_\x83`\x04\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _\x83\x81R` \x01\x90\x81R` \x01_ \x90P\x80\x88\x88\x90\x91\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x92\x90\x91\x92\x90\x91\x92\x90\x91\x92P\x91\x82a\x12\r\x92\x91\x90aQ\x01V[P\x83`\x02\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _\x83\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x83_\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x12\xC3WPa\x12\xC2\x81\x80T\x90Pa'\x97V[[\x15a\x13KW`\x01\x84_\x01_\x8D\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x81\x84`\x03\x01_\x8D\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x8A\x7F\xD7\xE5\x8A6z\nl)\x8Ev\xAD]$\0\x04\xE3'\xAA\x14#\xCB\xE4\xBD\x7F\xF8]Lq^\xF8\xD1_\x8B\x8B\x84\x8A\x8A`@Qa\x13B\x95\x94\x93\x92\x91\x90aS\x1CV[`@Q\x80\x91\x03\x90\xA2[PPPPPPPPPPPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cF\xFB\xF6\x8E3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\xA5\x91\x90aK|V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x13\xC0W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13\xE4\x91\x90aK\xBFV[\x15\x80\x15a\x141WPs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x14sW3`@Q\x7F8\x89\x16\xBB\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\x81R`\x04\x01a\x14j\x91\x90aK|V[`@Q\x80\x91\x03\x90\xFD[a\x14{a((V[V[_``\x80_\x80_``_a\x14\x8Fa(\x97V[\x90P_\x80\x1B\x81_\x01T\x14\x80\x15a\x14\xAAWP_\x80\x1B\x81`\x01\x01T\x14[a\x14\xE9W`@Q\x7F\x08\xC3y\xA0\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\x81R`\x04\x01a\x14\xE0\x90aS\xB4V[`@Q\x80\x91\x03\x90\xFD[a\x14\xF1a(\xBEV[a\x14\xF9a)\\V[F0_\x80\x1B_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x15\x18Wa\x15\x17aE\xDCV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x15FW\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x7F\x0F\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\x95\x94\x93\x92\x91\x90\x97P\x97P\x97P\x97P\x97P\x97P\x97PP\x90\x91\x92\x93\x94\x95\x96V[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[a\x15\xC7a)\xFAV[_\x84\x84\x90P\x03a\x16\x03W`@Q\x7F-\xE7T8\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x16L\x84\x84\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa*;V[_s\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xA1O\x89q\x86\x86`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x16\x9C\x92\x91\x90aTJV[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x16\xB6W=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x16\xDE\x91\x90aV\xE1V[\x90Pa\x16\xE9\x81a*\xF3V[_a\x16\xF2a\x1E\x9DV[\x90P\x80`\x06\x01_\x81T\x80\x92\x91\x90a\x17\x08\x90aW(V[\x91\x90PUP_\x81`\x06\x01T\x90P\x86\x86\x83`\x05\x01_\x84\x81R` \x01\x90\x81R` \x01_ \x91\x90a\x177\x92\x91\x90a@\xB2V[P\x80\x7F\"\xDBH\n9\xBDrUd8\xAA\xDBJ2\xA3\xD2\xA6c\x8B\x87\xC0;\xBE\xC5\xFE\xF6\x99~\x10\x95\x87\xFF\x84\x87\x87`@Qa\x17l\x93\x92\x91\x90aY\x05V[`@Q\x80\x91\x03\x90\xA2PPPPPPPV[a\x17\x85a)\xFAV[_\x88\x80` \x01\x90a\x17\x96\x91\x90aYHV[\x90P\x03a\x17\xCFW`@Q\x7FW\xCF\xA2\x17\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\n`\xFF\x16\x88\x80` \x01\x90a\x17\xE4\x91\x90aYHV[\x90P\x11\x15a\x18=W`\n\x88\x80` \x01\x90a\x17\xFE\x91\x90aYHV[\x90P`@Q\x7F\xAF\x1F\x04\x95\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\x81R`\x04\x01a\x184\x92\x91\x90aY\xE6V[`@Q\x80\x91\x03\x90\xFD[a\x18V\x89\x806\x03\x81\x01\x90a\x18Q\x91\x90aZZV[a+\xD9V[a\x18\xAE\x88\x80` \x01\x90a\x18i\x91\x90aYHV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x88a-$V[\x15a\x19\x02W\x86\x88\x80` \x01\x90a\x18\xC4\x91\x90aYHV[`@Q\x7F\xDCMx\xB1\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\x81R`\x04\x01a\x18\xF9\x93\x92\x91\x90a[\x0BV[`@Q\x80\x91\x03\x90\xFD[_a\x19]\x8C\x8C\x8B\x80` \x01\x90a\x19\x18\x91\x90aYHV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x8Ba-\xA2V[\x90P_`@Q\x80`\xA0\x01`@R\x80\x89\x89\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x8B\x80` \x01\x90a\x19\xC4\x91\x90aYHV[\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x8C_\x015\x81R` \x01\x8C` \x015\x81R` \x01\x85\x85\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90Pa\x1At\x81\x8A\x88\x88\x8E_\x015a/\x95V[_s\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xA1O\x89q\x84`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1A\xC2\x91\x90a[\xD3V[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1A\xDCW=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1B\x04\x91\x90aV\xE1V[\x90Pa\x1B\x0F\x81a*\xF3V[_a\x1B\x18a\x1E\x9DV[\x90P\x80`\x08\x01_\x81T\x80\x92\x91\x90a\x1B.\x90aW(V[\x91\x90PUP_\x81`\x08\x01T\x90P`@Q\x80`@\x01`@R\x80\x8C\x8C\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x86\x81RP\x82`\x07\x01_\x83\x81R` \x01\x90\x81R` \x01_ _\x82\x01Q\x81_\x01\x90\x81a\x1B\xB9\x91\x90a[\xFDV[P` \x82\x01Q\x81`\x01\x01\x90\x80Q\x90` \x01\x90a\x1B\xD6\x92\x91\x90a@\xFDV[P\x90PP\x80\x7F\xF9\x01\x1B\xD6\xBA\r\xA6\x04\x9CR\rp\xFEYq\xF1~\xD7\xAByT\x86\x05%D\xB5\x10\x19\x89lYk\x84\x8E\x8E\x8E\x8C\x8C`@Qa\x1C\x14\x96\x95\x94\x93\x92\x91\x90a\\\xCCV[`@Q\x80\x91\x03\x90\xA2PPPPPPPPPPPPPPPPV[_\x80_\x90P[\x85\x85\x90P\x81\x10\x15a\x1E\x8EWs\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC6R\x8Fi\x87\x87\x84\x81\x81\x10a\x1C\x82Wa\x1C\x81aO-V[[\x90P`@\x02\x01_\x015\x89`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1C\xA9\x92\x91\x90a](V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1C\xC4W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1C\xE8\x91\x90aK\xBFV[\x15\x80a\x1D\xC4WPs\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC6R\x8Fi\x87\x87\x84\x81\x81\x10a\x1D2Wa\x1D1aO-V[[\x90P`@\x02\x01_\x015\x88\x88\x85\x81\x81\x10a\x1DNWa\x1DMaO-V[[\x90P`@\x02\x01` \x01` \x81\x01\x90a\x1Df\x91\x90a]OV[`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1D\x83\x92\x91\x90a](V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1D\x9EW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1D\xC2\x91\x90aK\xBFV[\x15[\x80a\x1EsWPs\xC7\xD4Va\xA3E\xEC\\\xA0\xE8R\x1C\xFE\xF7\xE3/\xDA\r\xAAhs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xDC\x9Ao\x87\x87\x84\x81\x81\x10a\x1E\rWa\x1E\x0CaO-V[[\x90P`@\x02\x01_\x015`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1E2\x91\x90aGrV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1EMW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1Eq\x91\x90aK\xBFV[\x15[\x15a\x1E\x81W_\x91PPa\x1E\x94V[\x80\x80`\x01\x01\x91PPa\x1C4V[P`\x01\x90P[\x95\x94PPPPPV[_\x7Fh\x11>h\xAFILn\xFD\x02\x10\xFCK\xF9\xBAt\x8D\x1F\xFA\xDA\xA4q\x82\x17\xFD\xF65H\xC4\xAE\xE7\0\x90P\x90V[_a\x1F\x84`@Q\x80`\xA0\x01`@R\x80`m\x81R` \x01ae&`m\x919\x80Q\x90` \x01 \x83_\x01Q\x80Q\x90` \x01 \x84` \x01Q`@Q` \x01a\x1F\x08\x91\x90a^\x06V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x85`@\x01Q\x80Q\x90` \x01 \x86``\x01Q`@Q` \x01a\x1F?\x91\x90a^VV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a\x1Fi\x95\x94\x93\x92\x91\x90a^lV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a0mV[\x90P\x91\x90PV[_a\x1F\x94a\x1E\x9DV[\x90P_a\x1F\xE4\x85\x85\x85\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa0\x86V[\x90Pa\x1F\xEF\x81a0\xB0V[\x81`\x01\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a \x8EW\x85\x81`@Q\x7F\x99\xECH\xD9\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\x81R`\x04\x01a \x85\x92\x91\x90a^\xBDV[`@Q\x80\x91\x03\x90\xFD[`\x01\x82`\x01\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPPPPPPPV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC2\xB4)\x86`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a![W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a!\x7F\x91\x90a^\xE4V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[``_`\x01a!\x9B\x84a1\x80V[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a!\xB9Wa!\xB8aE\xDCV[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a!\xEBW\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a\"LW\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a\"AWa\"@a_\x0FV[[\x04\x94P_\x85\x03a!\xF8W[\x81\x93PPPP\x91\x90PV[_a\"`a\"{V[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[a\"\xAAa2\xD1V[a\"\xB4\x82\x82a3\x11V[PPV[a\"\xC0a2\xD1V[a\"\xC8a3bV[V[a\"\xD2a3\x92V[_a\"\xDBa&\xB6V[\x90P_\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F]\xB9\xEE\nI[\xF2\xE6\xFF\x9C\x91\xA7\x83L\x1B\xA4\xFD\xD2D\xA5\xE8\xAANS{\xD3\x8A\xEA\xE4\xB0s\xAAa# a3\xD2V[`@Qa#-\x91\x90aK|V[`@Q\x80\x91\x03\x90\xA1PV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a#\xE5WP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a#\xCCa3\xD9V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a$\x1CW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a${W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a$\x9F\x91\x90aO\x02V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a%\x0EW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a%\x05\x91\x90aK|V[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a%yWP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a%v\x91\x90a_ v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a& W\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a&\x17\x91\x90aGrV[`@Q\x80\x91\x03\x90\xFD[a&*\x83\x83a4,V[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a&\xB4W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x7F\xCD^\xD1\\n\x18~w\xE9\xAE\xE8\x81\x84\xC2\x1FO!\x82\xABX'\xCB;~\x07\xFB\xED\xCDc\xF03\0\x90P\x90V[_a'\x90`@Q\x80`\x80\x01`@R\x80`T\x81R` \x01ae\x93`T\x919\x80Q\x90` \x01 \x83_\x01Q`@Q` \x01a'\x15\x91\x90a^\x06V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x84` \x01Q\x80Q\x90` \x01 \x85`@\x01Q`@Q` \x01a'L\x91\x90a^VV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a'u\x94\x93\x92\x91\x90a_gV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a0mV[\x90P\x91\x90PV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c*8\x89\x98`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a'\xF6W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a(\x1A\x91\x90a^\xE4V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[a(0a)\xFAV[_a(9a&\xB6V[\x90P`\x01\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7Fb\xE7\x8C\xEA\x01\xBE\xE3 \xCDNB\x02p\xB5\xEAt\0\r\x11\xB0\xC9\xF7GT\xEB\xDB\xFCTK\x05\xA2Xa(\x7Fa3\xD2V[`@Qa(\x8C\x91\x90aK|V[`@Q\x80\x91\x03\x90\xA1PV[_\x7F\xA1jF\xD9Ba\xC7Q|\xC8\xFF\x89\xF6\x1C\x0C\xE95\x98\xE3\xC8I\x80\x10\x11\xDE\xE6I\xA6\xA5W\xD1\0\x90P\x90V[``_a(\xC9a(\x97V[\x90P\x80`\x02\x01\x80Ta(\xDA\x90aL]V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta)\x06\x90aL]V[\x80\x15a)QW\x80`\x1F\x10a)(Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a)QV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a)4W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[``_a)ga(\x97V[\x90P\x80`\x03\x01\x80Ta)x\x90aL]V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta)\xA4\x90aL]V[\x80\x15a)\xEFW\x80`\x1F\x10a)\xC6Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a)\xEFV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a)\xD2W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[a*\x02a\x0F/V[\x15a*9W`@Q\x7F\xD9<\x06e\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x80[\x82Q\x81\x10\x15a*\xA3W_\x83\x82\x81Q\x81\x10a*[Wa*ZaO-V[[` \x02` \x01\x01Q\x90P_a*o\x82a4\x9EV[\x90Pa*z\x81a5(V[a\xFF\xFF\x16\x84a*\x89\x91\x90a_\xAAV[\x93Pa*\x94\x82a7\x13V[PP\x80\x80`\x01\x01\x91PPa*>V[Pa\x08\0\x81\x11\x15a*\xEFWa\x08\0\x81`@Q\x7F\xE7\xF4\x89]\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\x81R`\x04\x01a*\xE6\x92\x91\x90a_\xDDV[`@Q\x80\x91\x03\x90\xFD[PPV[`\x01\x81Q\x11\x15a+\xD6W_\x81_\x81Q\x81\x10a+\x11Wa+\x10aO-V[[` \x02` \x01\x01Q` \x01Q\x90P_`\x01\x90P[\x82Q\x81\x10\x15a+\xD3W\x81\x83\x82\x81Q\x81\x10a+BWa+AaO-V[[` \x02` \x01\x01Q` \x01Q\x14a+\xC6W\x82_\x81Q\x81\x10a+fWa+eaO-V[[` \x02` \x01\x01Q\x83\x82\x81Q\x81\x10a+\x81Wa+\x80aO-V[[` \x02` \x01\x01Q`@Q\x7F\xCF\xAE\x92\x1F\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\x81R`\x04\x01a+\xBD\x92\x91\x90a`dV[`@Q\x80\x91\x03\x90\xFD[\x80\x80`\x01\x01\x91PPa+%V[PP[PV[_\x81` \x01Q\x03a,\x16W`@Q\x7F\xDE(Y\xC1\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x01ma\xFF\xFF\x16\x81` \x01Q\x11\x15a,mWa\x01m\x81` \x01Q`@Q\x7F2\x95\x18c\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\x81R`\x04\x01a,d\x92\x91\x90a`\xD6V[`@Q\x80\x91\x03\x90\xFD[B\x81_\x01Q\x11\x15a,\xBAWB\x81_\x01Q`@Q\x7F\xF2L\x08\x87\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\x81R`\x04\x01a,\xB1\x92\x91\x90a_\xDDV[`@Q\x80\x91\x03\x90\xFD[Bb\x01Q\x80\x82` \x01Qa,\xCE\x91\x90a`\xFDV[\x82_\x01Qa,\xDC\x91\x90a_\xAAV[\x10\x15a-!WB\x81`@Q\x7F04\x80@\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\x81R`\x04\x01a-\x18\x92\x91\x90aakV[`@Q\x80\x91\x03\x90\xFD[PV[_\x80_\x90P[\x83Q\x81\x10\x15a-\x97W\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84\x82\x81Q\x81\x10a-]Wa-\\aO-V[[` \x02` \x01\x01Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x03a-\x8AW`\x01\x91PPa-\x9CV[\x80\x80`\x01\x01\x91PPa-*V[P_\x90P[\x92\x91PPV[``_\x85\x85\x90P\x03a-\xE0W`@Q\x7F\xA6\xA6\xCB!\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84\x84\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a-\xFDWa-\xFCaE\xDCV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a.+W\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x80[\x86\x86\x90P\x81\x10\x15a/@W_\x87\x87\x83\x81\x81\x10a.PWa.OaO-V[[\x90P`@\x02\x01_\x015\x90P_\x88\x88\x84\x81\x81\x10a.oWa.naO-V[[\x90P`@\x02\x01` \x01` \x81\x01\x90a.\x87\x91\x90a]OV[\x90P_a.\x93\x83a4\x9EV[\x90Pa.\x9E\x81a5(V[a\xFF\xFF\x16\x85a.\xAD\x91\x90a_\xAAV[\x94Pa.\xB9\x83\x88a7\xE3V[a.\xC3\x83\x83a7\xE3V[a.\xCD\x88\x83a-$V[a/\x10W\x81\x88`@Q\x7F\xA4\xC3\x03\x91\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\x81R`\x04\x01a/\x07\x92\x91\x90aa\x92V[`@Q\x80\x91\x03\x90\xFD[\x82\x86\x85\x81Q\x81\x10a/$Wa/#aO-V[[` \x02` \x01\x01\x81\x81RPPPPP\x80\x80`\x01\x01\x91PPa.1V[Pa\x08\0\x81\x11\x15a/\x8CWa\x08\0\x81`@Q\x7F\xE7\xF4\x89]\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\x81R`\x04\x01a/\x83\x92\x91\x90a_\xDDV[`@Q\x80\x91\x03\x90\xFD[P\x94\x93PPPPV[_a/\xA0\x86\x83a8\xB8V[\x90P_a/\xF0\x82\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa0\x86V[\x90P\x85s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a0dW\x84\x84`@Q\x7F*\x87='\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\x81R`\x04\x01a0[\x92\x91\x90aa\xC0V[`@Q\x80\x91\x03\x90\xFD[PPPPPPPV[_a0\x7Fa0ya9\x85V[\x83a9\x93V[\x90P\x91\x90PV[_\x80_\x80a0\x94\x86\x86a9\xD3V[\x92P\x92P\x92Pa0\xA4\x82\x82a:(V[\x82\x93PPPP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c =\x01\x14\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a0\xFD\x91\x90aK|V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a1\x18W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a1<\x91\x90aK\xBFV[a1}W\x80`@Q\x7F*|n\xF6\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\x81R`\x04\x01a1t\x91\x90aK|V[`@Q\x80\x91\x03\x90\xFD[PV[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a1\xDCWz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a1\xD2Wa1\xD1a_\x0FV[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a2\x19Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a2\x0FWa2\x0Ea_\x0FV[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a2HWf#\x86\xF2o\xC1\0\0\x83\x81a2>Wa2=a_\x0FV[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a2qWc\x05\xF5\xE1\0\x83\x81a2gWa2fa_\x0FV[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a2\x96Wa'\x10\x83\x81a2\x8CWa2\x8Ba_\x0FV[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a2\xB9W`d\x83\x81a2\xAFWa2\xAEa_\x0FV[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a2\xC8W`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[a2\xD9a;\x8AV[a3\x0FW`@Q\x7F\xD7\xE6\xBC\xF8\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[a3\x19a2\xD1V[_a3\"a(\x97V[\x90P\x82\x81`\x02\x01\x90\x81a35\x91\x90ab:V[P\x81\x81`\x03\x01\x90\x81a3G\x91\x90ab:V[P_\x80\x1B\x81_\x01\x81\x90UP_\x80\x1B\x81`\x01\x01\x81\x90UPPPPV[a3ja2\xD1V[_a3sa&\xB6V[\x90P_\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPPV[a3\x9Aa\x0F/V[a3\xD0W`@Q\x7F\x8D\xFC +\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_3\x90P\x90V[_a4\x05\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba;\xA8V[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a45\x82a;\xB1V[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a4\x91Wa4\x8B\x82\x82a=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a7\x9F\x91\x90aK\xBFV[a7\xE0W\x80`@Q\x7FC1\xA8]\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\x81R`\x04\x01a7\xD7\x91\x90aGrV[`@Q\x80\x91\x03\x90\xFD[PV[s\xF3b\x7Fs\xC8\xAE\x1D\x0B\xDC*\xF6(\x12(C\x03\xA5%\xEE\xEFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xC6R\x8Fi\x83\x83`@Q\x83c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a82\x92\x91\x90a](V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a8MW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a8q\x91\x90aK\xBFV[a8\xB4W\x81\x81`@Q\x7F\x16\n+K\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\x81R`\x04\x01a8\xAB\x92\x91\x90a](V[`@Q\x80\x91\x03\x90\xFD[PPV[_\x80`@Q\x80`\xC0\x01`@R\x80`\x87\x81R` \x01ae\xE7`\x87\x919\x80Q\x90` \x01 \x84_\x01Q\x80Q\x90` \x01 \x85` \x01Q`@Q` \x01a8\xFA\x91\x90ad\x1CV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x86`@\x01Q\x87``\x01Q\x88`\x80\x01Q`@Q` \x01a9/\x91\x90a^VV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a9Z\x96\x95\x94\x93\x92\x91\x90ad2V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90Pa9|\x83\x82a=6V[\x91PP\x92\x91PPV[_a9\x8Ea=\xAAV[\x90P\x90V[_`@Q\x7F\x19\x01\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\x81R\x83`\x02\x82\x01R\x82`\"\x82\x01R`B\x81 \x91PP\x92\x91PPV[_\x80_`A\x84Q\x03a:\x13W_\x80_` \x87\x01Q\x92P`@\x87\x01Q\x91P``\x87\x01Q_\x1A\x90Pa:\x05\x88\x82\x85\x85a>\rV[\x95P\x95P\x95PPPPa:!V[_`\x02\x85Q_\x1B\x92P\x92P\x92P[\x92P\x92P\x92V[_`\x03\x81\x11\x15a:;Wa::aK\xEAV[[\x82`\x03\x81\x11\x15a:NWa:MaK\xEAV[[\x03\x15a;\x86W`\x01`\x03\x81\x11\x15a:hWa:gaK\xEAV[[\x82`\x03\x81\x11\x15a:{Wa:zaK\xEAV[[\x03a:\xB2W`@Q\x7F\xF6E\xEE\xDF\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02`\x03\x81\x11\x15a:\xC6Wa:\xC5aK\xEAV[[\x82`\x03\x81\x11\x15a:\xD9Wa:\xD8aK\xEAV[[\x03a;\x1DW\x80_\x1C`@Q\x7F\xFC\xE6\x98\xF7\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\x81R`\x04\x01a;\x14\x91\x90aL\x17V[`@Q\x80\x91\x03\x90\xFD[`\x03\x80\x81\x11\x15a;0Wa;/aK\xEAV[[\x82`\x03\x81\x11\x15a;CWa;BaK\xEAV[[\x03a;\x85W\x80`@Q\x7F\xD7\x8B\xCE\x0C\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\x81R`\x04\x01a;|\x91\x90aGrV[`@Q\x80\x91\x03\x90\xFD[[PPV[_a;\x93a\"{V[_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x90P\x90V[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a<\x0CW\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a<\x03\x91\x90aK|V[`@Q\x80\x91\x03\x90\xFD[\x80a<8\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba;\xA8V[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa<\xA3\x91\x90a^VV[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a<\xDBW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a<\xE0V[``\x91P[P\x91P\x91Pa<\xF0\x85\x83\x83a>\xF4V[\x92PPP\x92\x91PPV[_4\x11\x15a=4W`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x80\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0Fa=aa?\x81V[a=ia?\xF7V[\x860`@Q` \x01a=\x7F\x95\x94\x93\x92\x91\x90ad\x91V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90Pa=\xA1\x81\x84a9\x93V[\x91PP\x92\x91PPV[_\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0Fa=\xD4a?\x81V[a=\xDCa?\xF7V[F0`@Q` \x01a=\xF2\x95\x94\x93\x92\x91\x90ad\x91V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x90V[_\x80_\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF]WnsW\xA4P\x1D\xDF\xE9/Fh\x1B \xA0\x84_\x1C\x11\x15a>IW_`\x03\x85\x92P\x92P\x92Pa>\xEAV[_`\x01\x88\x88\x88\x88`@Q_\x81R` \x01`@R`@Qa>l\x94\x93\x92\x91\x90ad\xE2V[` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a>\x8CW=_\x80>=_\xFD[PPP` `@Q\x03Q\x90P_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x03a>\xDDW_`\x01_\x80\x1B\x93P\x93P\x93PPa>\xEAV[\x80_\x80_\x1B\x93P\x93P\x93PP[\x94P\x94P\x94\x91PPV[``\x82a?\tWa?\x04\x82a@nV[a?yV[_\x82Q\x14\x80\x15a?/WP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a?qW\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a?h\x91\x90aK|V[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa?zV[[\x93\x92PPPV[_\x80a?\x8Ba(\x97V[\x90P_a?\x96a(\xBEV[\x90P_\x81Q\x11\x15a?\xB2W\x80\x80Q\x90` \x01 \x92PPPa?\xF4V[_\x82_\x01T\x90P_\x80\x1B\x81\x14a?\xCDW\x80\x93PPPPa?\xF4V[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x80a@\x01a(\x97V[\x90P_a@\x0Ca)\\V[\x90P_\x81Q\x11\x15a@(W\x80\x80Q\x90` \x01 \x92PPPa@kV[_\x82`\x01\x01T\x90P_\x80\x1B\x81\x14a@DW\x80\x93PPPPa@kV[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x81Q\x11\x15a@\x80W\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x82\x80T\x82\x82U\x90_R` _ \x90\x81\x01\x92\x82\x15a@\xECW\x91` \x02\x82\x01[\x82\x81\x11\x15a@\xEBW\x825\x82U\x91` \x01\x91\x90`\x01\x01\x90a@\xD0V[[P\x90Pa@\xF9\x91\x90aAHV[P\x90V[\x82\x80T\x82\x82U\x90_R` _ \x90\x81\x01\x92\x82\x15aA7W\x91` \x02\x82\x01[\x82\x81\x11\x15aA6W\x82Q\x82U\x91` \x01\x91\x90`\x01\x01\x90aA\x1BV[[P\x90PaAD\x91\x90aAHV[P\x90V[[\x80\x82\x11\x15aA_W_\x81_\x90UP`\x01\x01aAIV[P\x90V[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[aA\x86\x81aAtV[\x81\x14aA\x90W_\x80\xFD[PV[_\x815\x90PaA\xA1\x81aA}V[\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12aA\xC8WaA\xC7aA\xA7V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aA\xE5WaA\xE4aA\xABV[[` \x83\x01\x91P\x83`\x01\x82\x02\x83\x01\x11\x15aB\x01WaB\0aA\xAFV[[\x92P\x92\x90PV[_\x80_\x80_\x80_`\x80\x88\x8A\x03\x12\x15aB#WaB\"aAlV[[_aB0\x8A\x82\x8B\x01aA\x93V[\x97PP` \x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aBQWaBPaApV[[aB]\x8A\x82\x8B\x01aA\xB3V[\x96P\x96PP`@\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aB\x80WaB\x7FaApV[[aB\x8C\x8A\x82\x8B\x01aA\xB3V[\x94P\x94PP``\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aB\xAFWaB\xAEaApV[[aB\xBB\x8A\x82\x8B\x01aA\xB3V[\x92P\x92PP\x92\x95\x98\x91\x94\x97P\x92\x95PV[_` \x82\x84\x03\x12\x15aB\xE1WaB\xE0aAlV[[_aB\xEE\x84\x82\x85\x01aA\x93V[\x91PP\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_aCI\x82aC V[\x90P\x91\x90PV[aCY\x81aC?V[\x82RPPV[_aCj\x83\x83aCPV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aC\x8C\x82aB\xF7V[aC\x96\x81\x85aC\x01V[\x93PaC\xA1\x83aC\x11V[\x80_[\x83\x81\x10\x15aC\xD1W\x81QaC\xB8\x88\x82aC_V[\x97PaC\xC3\x83aCvV[\x92PP`\x01\x81\x01\x90PaC\xA4V[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01RaC\xF6\x81\x84aC\x82V[\x90P\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15aD5W\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90PaD\x1AV[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_aDZ\x82aC\xFEV[aDd\x81\x85aD\x08V[\x93PaDt\x81\x85` \x86\x01aD\x18V[aD}\x81aD@V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01RaD\xA0\x81\x84aDPV[\x90P\x92\x91PPV[_\x80\x83`\x1F\x84\x01\x12aD\xBDWaD\xBCaA\xA7V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aD\xDAWaD\xD9aA\xABV[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15aD\xF6WaD\xF5aA\xAFV[[\x92P\x92\x90PV[_\x80_\x80`@\x85\x87\x03\x12\x15aE\x15WaE\x14aAlV[[_\x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aE2WaE1aApV[[aE>\x87\x82\x88\x01aD\xA8V[\x94P\x94PP` \x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aEaWaE`aApV[[aEm\x87\x82\x88\x01aA\xB3V[\x92P\x92PP\x92\x95\x91\x94P\x92PV[_\x81\x15\x15\x90P\x91\x90PV[aE\x8F\x81aE{V[\x82RPPV[_` \x82\x01\x90PaE\xA8_\x83\x01\x84aE\x86V[\x92\x91PPV[aE\xB7\x81aC?V[\x81\x14aE\xC1W_\x80\xFD[PV[_\x815\x90PaE\xD2\x81aE\xAEV[\x92\x91PPV[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[aF\x12\x82aD@V[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15aF1WaF0aE\xDCV[[\x80`@RPPPV[_aFCaAcV[\x90PaFO\x82\x82aF\tV[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aFnWaFmaE\xDCV[[aFw\x82aD@V[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_aF\xA4aF\x9F\x84aFTV[aF:V[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15aF\xC0WaF\xBFaE\xD8V[[aF\xCB\x84\x82\x85aF\x84V[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12aF\xE7WaF\xE6aA\xA7V[[\x815aF\xF7\x84\x82` \x86\x01aF\x92V[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15aG\x16WaG\x15aAlV[[_aG#\x85\x82\x86\x01aE\xC4V[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aGDWaGCaApV[[aGP\x85\x82\x86\x01aF\xD3V[\x91PP\x92P\x92\x90PV[_\x81\x90P\x91\x90PV[aGl\x81aGZV[\x82RPPV[_` \x82\x01\x90PaG\x85_\x83\x01\x84aGcV[\x92\x91PPV[_\x7F\xFF\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\x82\x16\x90P\x91\x90PV[aG\xBF\x81aG\x8BV[\x82RPPV[aG\xCE\x81aAtV[\x82RPPV[aG\xDD\x81aC?V[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[aH\x15\x81aAtV[\x82RPPV[_aH&\x83\x83aH\x0CV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aHH\x82aG\xE3V[aHR\x81\x85aG\xEDV[\x93PaH]\x83aG\xFDV[\x80_[\x83\x81\x10\x15aH\x8DW\x81QaHt\x88\x82aH\x1BV[\x97PaH\x7F\x83aH2V[\x92PP`\x01\x81\x01\x90PaH`V[P\x85\x93PPPP\x92\x91PPV[_`\xE0\x82\x01\x90PaH\xAD_\x83\x01\x8AaG\xB6V[\x81\x81\x03` \x83\x01RaH\xBF\x81\x89aDPV[\x90P\x81\x81\x03`@\x83\x01RaH\xD3\x81\x88aDPV[\x90PaH\xE2``\x83\x01\x87aG\xC5V[aH\xEF`\x80\x83\x01\x86aG\xD4V[aH\xFC`\xA0\x83\x01\x85aGcV[\x81\x81\x03`\xC0\x83\x01RaI\x0E\x81\x84aH>V[\x90P\x98\x97PPPPPPPPV[_\x80\x83`\x1F\x84\x01\x12aI1WaI0aA\xA7V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aINWaIMaA\xABV[[` \x83\x01\x91P\x83`@\x82\x02\x83\x01\x11\x15aIjWaIiaA\xAFV[[\x92P\x92\x90PV[_\x80\xFD[_`@\x82\x84\x03\x12\x15aI\x8AWaI\x89aIqV[[\x81\x90P\x92\x91PPV[_`@\x82\x84\x03\x12\x15aI\xA8WaI\xA7aIqV[[\x81\x90P\x92\x91PPV[_\x80_\x80_\x80_\x80_\x80_a\x01\0\x8C\x8E\x03\x12\x15aI\xD1WaI\xD0aAlV[[_\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aI\xEEWaI\xEDaApV[[aI\xFA\x8E\x82\x8F\x01aI\x1CV[\x9BP\x9BPP` aJ\r\x8E\x82\x8F\x01aIuV[\x99PP``\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aJ.WaJ-aApV[[aJ:\x8E\x82\x8F\x01aI\x93V[\x98PP`\x80aJK\x8E\x82\x8F\x01aE\xC4V[\x97PP`\xA0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aJlWaJkaApV[[aJx\x8E\x82\x8F\x01aA\xB3V[\x96P\x96PP`\xC0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aJ\x9BWaJ\x9AaApV[[aJ\xA7\x8E\x82\x8F\x01aA\xB3V[\x94P\x94PP`\xE0\x8C\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aJ\xCAWaJ\xC9aApV[[aJ\xD6\x8E\x82\x8F\x01aA\xB3V[\x92P\x92PP\x92\x95\x98\x9BP\x92\x95\x98\x9B\x90\x93\x96\x99PV[_\x80_\x80_``\x86\x88\x03\x12\x15aK\x04WaK\x03aAlV[[_aK\x11\x88\x82\x89\x01aE\xC4V[\x95PP` \x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aK2WaK1aApV[[aK>\x88\x82\x89\x01aI\x1CV[\x94P\x94PP`@\x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aKaWaK`aApV[[aKm\x88\x82\x89\x01aA\xB3V[\x92P\x92PP\x92\x95P\x92\x95\x90\x93PV[_` \x82\x01\x90PaK\x8F_\x83\x01\x84aG\xD4V[\x92\x91PPV[aK\x9E\x81aE{V[\x81\x14aK\xA8W_\x80\xFD[PV[_\x81Q\x90PaK\xB9\x81aK\x95V[\x92\x91PPV[_` \x82\x84\x03\x12\x15aK\xD4WaK\xD3aAlV[[_aK\xE1\x84\x82\x85\x01aK\xABV[\x91PP\x92\x91PPV[\x7FNH{q\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_R`!`\x04R`$_\xFD[_` \x82\x01\x90PaL*_\x83\x01\x84aG\xC5V[\x92\x91PPV[\x7FNH{q\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_R`\"`\x04R`$_\xFD[_`\x02\x82\x04\x90P`\x01\x82\x16\x80aLtW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03aL\x87WaL\x86aL0V[[P\x91\x90PV[\x7FNH{q\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_R`\x11`\x04R`$_\xFD[_aL\xC4\x82aAtV[\x91PaL\xCF\x83aAtV[\x92P\x82\x82\x03\x90P\x81\x81\x11\x15aL\xE7WaL\xE6aL\x8DV[[\x92\x91PPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_aM\x08\x83\x85aL\xEDV[\x93PaM\x15\x83\x85\x84aF\x84V[aM\x1E\x83aD@V[\x84\x01\x90P\x93\x92PPPV[_`\x80\x82\x01\x90PaM<_\x83\x01\x8AaG\xC5V[\x81\x81\x03` \x83\x01RaMO\x81\x88\x8AaL\xFDV[\x90P\x81\x81\x03`@\x83\x01RaMd\x81\x86\x88aL\xFDV[\x90P\x81\x81\x03``\x83\x01RaMy\x81\x84\x86aL\xFDV[\x90P\x98\x97PPPPPPPPV[_\x81\x90P\x92\x91PPV[_aM\x9B\x82aC\xFEV[aM\xA5\x81\x85aM\x87V[\x93PaM\xB5\x81\x85` \x86\x01aD\x18V[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_aM\xF5`\x02\x83aM\x87V[\x91PaN\0\x82aM\xC1V[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_aN?`\x01\x83aM\x87V[\x91PaNJ\x82aN\x0BV[`\x01\x82\x01\x90P\x91\x90PV[_aN`\x82\x87aM\x91V[\x91PaNk\x82aM\xE9V[\x91PaNw\x82\x86aM\x91V[\x91PaN\x82\x82aN3V[\x91PaN\x8E\x82\x85aM\x91V[\x91PaN\x99\x82aN3V[\x91PaN\xA5\x82\x84aM\x91V[\x91P\x81\x90P\x95\x94PPPPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[aN\xCF\x81aN\xB3V[\x82RPPV[_` \x82\x01\x90PaN\xE8_\x83\x01\x84aN\xC6V[\x92\x91PPV[_\x81Q\x90PaN\xFC\x81aE\xAEV[\x92\x91PPV[_` \x82\x84\x03\x12\x15aO\x17WaO\x16aAlV[[_aO$\x84\x82\x85\x01aN\xEEV[\x91PP\x92\x91PPV[\x7FNH{q\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_R`2`\x04R`$_\xFD[_\x82\x90P\x92\x91PPV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_` `\x1F\x83\x01\x04\x90P\x91\x90PV[_\x82\x82\x1B\x90P\x92\x91PPV[_`\x08\x83\x02aO\xC0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82aO\x85V[aO\xCA\x86\x83aO\x85V[\x95P\x80\x19\x84\x16\x93P\x80\x86\x16\x84\x17\x92PPP\x93\x92PPPV[_\x81\x90P\x91\x90PV[_aP\x05aP\0aO\xFB\x84aAtV[aO\xE2V[aAtV[\x90P\x91\x90PV[_\x81\x90P\x91\x90PV[aP\x1E\x83aO\xEBV[aP2aP*\x82aP\x0CV[\x84\x84TaO\x91V[\x82UPPPPV[_\x90V[aPFaP:V[aPQ\x81\x84\x84aP\x15V[PPPV[[\x81\x81\x10\x15aPtWaPi_\x82aP>V[`\x01\x81\x01\x90PaPWV[PPV[`\x1F\x82\x11\x15aP\xB9WaP\x8A\x81aOdV[aP\x93\x84aOvV[\x81\x01` \x85\x10\x15aP\xA2W\x81\x90P[aP\xB6aP\xAE\x85aOvV[\x83\x01\x82aPVV[PP[PPPV[_\x82\x82\x1C\x90P\x92\x91PPV[_aP\xD9_\x19\x84`\x08\x02aP\xBEV[\x19\x80\x83\x16\x91PP\x92\x91PPV[_aP\xF1\x83\x83aP\xCAV[\x91P\x82`\x02\x02\x82\x17\x90P\x92\x91PPV[aQ\x0B\x83\x83aOZV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aQ$WaQ#aE\xDCV[[aQ.\x82TaL]V[aQ9\x82\x82\x85aPxV[_`\x1F\x83\x11`\x01\x81\x14aQfW_\x84\x15aQTW\x82\x87\x015\x90P[aQ^\x85\x82aP\xE6V[\x86UPaQ\xC5V[`\x1F\x19\x84\x16aQt\x86aOdV[_[\x82\x81\x10\x15aQ\x9BW\x84\x89\x015\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90PaQvV[\x86\x83\x10\x15aQ\xB8W\x84\x89\x015aQ\xB4`\x1F\x89\x16\x82aP\xCAV[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPPV[_\x81T\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81TaR\x16\x81aL]V[aR \x81\x86aQ\xFAV[\x94P`\x01\x82\x16_\x81\x14aR:W`\x01\x81\x14aRPWaR\x82V[`\xFF\x19\x83\x16\x86R\x81\x15\x15` \x02\x86\x01\x93PaR\x82V[aRY\x85aOdV[_[\x83\x81\x10\x15aRzW\x81T\x81\x89\x01R`\x01\x82\x01\x91P` \x81\x01\x90PaR[V[\x80\x88\x01\x95PPP[PPP\x92\x91PPV[_aR\x96\x83\x83aR\nV[\x90P\x92\x91PPV[_`\x01\x82\x01\x90P\x91\x90PV[_aR\xB4\x82aQ\xCEV[aR\xBE\x81\x85aQ\xD8V[\x93P\x83` \x82\x02\x85\x01aR\xD0\x85aQ\xE8V[\x80_[\x85\x81\x10\x15aS\nW\x84\x84\x03\x89R\x81aR\xEB\x85\x82aR\x8BV[\x94PaR\xF6\x83aR\x9EV[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90PaR\xD3V[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_``\x82\x01\x90P\x81\x81\x03_\x83\x01RaS5\x81\x87\x89aL\xFDV[\x90P\x81\x81\x03` \x83\x01RaSI\x81\x86aR\xAAV[\x90P\x81\x81\x03`@\x83\x01RaS^\x81\x84\x86aL\xFDV[\x90P\x96\x95PPPPPPV[\x7FEIP712: Uninitialized\0\0\0\0\0\0\0\0\0\0\0_\x82\x01RPV[_aS\x9E`\x15\x83aD\x08V[\x91PaS\xA9\x82aSjV[` \x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01RaS\xCB\x81aS\x92V[\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x80\xFD[\x82\x81\x837PPPV[_aS\xFA\x83\x85aS\xD2V[\x93P\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x15aT-WaT,aS\xE2V[[` \x83\x02\x92PaT>\x83\x85\x84aS\xE6V[\x82\x84\x01\x90P\x93\x92PPPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01RaTc\x81\x84\x86aS\xEFV[\x90P\x93\x92PPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aT\x86WaT\x85aE\xDCV[[` \x82\x02\x90P` \x81\x01\x90P\x91\x90PV[_\x80\xFD[_\x80\xFD[aT\xA8\x81aGZV[\x81\x14aT\xB2W_\x80\xFD[PV[_\x81Q\x90PaT\xC3\x81aT\x9FV[\x92\x91PPV[_\x81Q\x90PaT\xD7\x81aA}V[\x92\x91PPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aT\xF7WaT\xF6aE\xDCV[[` \x82\x02\x90P` \x81\x01\x90P\x91\x90PV[_aU\x1AaU\x15\x84aT\xDDV[aF:V[\x90P\x80\x83\x82R` \x82\x01\x90P` \x84\x02\x83\x01\x85\x81\x11\x15aU=WaUV[\x93\x92PPPV[_`@\x82\x01\x90Paa\xA5_\x83\x01\x85aG\xD4V[\x81\x81\x03` \x83\x01Raa\xB7\x81\x84aC\x82V[\x90P\x93\x92PPPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Raa\xD9\x81\x84\x86aL\xFDV[\x90P\x93\x92PPPV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[`\x1F\x82\x11\x15ab5Wab\x06\x81aa\xE2V[ab\x0F\x84aOvV[\x81\x01` \x85\x10\x15ab\x1EW\x81\x90P[ab2ab*\x85aOvV[\x83\x01\x82aPVV[PP[PPPV[abC\x82aC\xFEV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15ab\\Wab[aE\xDCV[[abf\x82TaL]V[abq\x82\x82\x85aa\xF4V[_` \x90P`\x1F\x83\x11`\x01\x81\x14ab\xA2W_\x84\x15ab\x90W\x82\x87\x01Q\x90P[ab\x9A\x85\x82aP\xE6V[\x86UPac\x01V[`\x1F\x19\x84\x16ab\xB0\x86aa\xE2V[_[\x82\x81\x10\x15ab\xD7W\x84\x89\x01Q\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90Pab\xB2V[\x86\x83\x10\x15ab\xF4W\x84\x89\x01Qab\xF0`\x1F\x89\x16\x82aP\xCAV[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPV[ac\x12\x81aY\xAAV[\x82RPPV[_` \x82\x01\x90Pac+_\x83\x01\x84ac\tV[\x92\x91PPV[`T\x81\x10acBWacAaK\xEAV[[PV[_\x81\x90PacR\x82ac1V[\x91\x90PV[_aca\x82acEV[\x90P\x91\x90PV[acq\x81acWV[\x82RPPV[_` \x82\x01\x90Pac\x8A_\x83\x01\x84achV[\x92\x91PPV[_\x81\x90P\x92\x91PPV[ac\xA3\x81aC?V[\x82RPPV[_ac\xB4\x83\x83ac\x9AV[` \x83\x01\x90P\x92\x91PPV[_ac\xCA\x82aB\xF7V[ac\xD4\x81\x85ac\x90V[\x93Pac\xDF\x83aC\x11V[\x80_[\x83\x81\x10\x15ad\x0FW\x81Qac\xF6\x88\x82ac\xA9V[\x97Pad\x01\x83aCvV[\x92PP`\x01\x81\x01\x90Pac\xE2V[P\x85\x93PPPP\x92\x91PPV[_ad'\x82\x84ac\xC0V[\x91P\x81\x90P\x92\x91PPV[_`\xC0\x82\x01\x90PadE_\x83\x01\x89aGcV[adR` \x83\x01\x88aGcV[ad_`@\x83\x01\x87aGcV[adl``\x83\x01\x86aG\xC5V[ady`\x80\x83\x01\x85aG\xC5V[ad\x86`\xA0\x83\x01\x84aGcV[\x97\x96PPPPPPPV[_`\xA0\x82\x01\x90Pad\xA4_\x83\x01\x88aGcV[ad\xB1` \x83\x01\x87aGcV[ad\xBE`@\x83\x01\x86aGcV[ad\xCB``\x83\x01\x85aG\xC5V[ad\xD8`\x80\x83\x01\x84aG\xD4V[\x96\x95PPPPPPV[_`\x80\x82\x01\x90Pad\xF5_\x83\x01\x87aGcV[ae\x02` \x83\x01\x86ac\tV[ae\x0F`@\x83\x01\x85aGcV[ae\x1C``\x83\x01\x84aGcV[\x95\x94PPPPPV\xFEUserDecryptResponseVerification(bytes publicKey,bytes32[] ctHandles,bytes userDecryptedShare,bytes extraData)PublicDecryptVerification(bytes32[] ctHandles,bytes decryptedResult,bytes extraData)UserDecryptRequestVerification(bytes publicKey,address[] contractAddresses,uint256 startTimestamp,uint256 durationDays,bytes extraData)", ); #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] @@ -2458,15 +2247,21 @@ struct CtHandleContractPair { bytes32 ctHandle; address contractAddress; } #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] /**```solidity -struct DelegationAccounts { address delegatorAddress; address delegatedAddress; } +struct SnsCiphertextMaterial { bytes32 ctHandle; uint256 keyId; bytes32 snsCiphertextDigest; address[] coprocessorTxSenderAddresses; } ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct DelegationAccounts { + pub struct SnsCiphertextMaterial { + #[allow(missing_docs)] + pub ctHandle: alloy::sol_types::private::FixedBytes<32>, + #[allow(missing_docs)] + pub keyId: alloy::sol_types::private::primitives::aliases::U256, #[allow(missing_docs)] - pub delegatorAddress: alloy::sol_types::private::Address, + pub snsCiphertextDigest: alloy::sol_types::private::FixedBytes<32>, #[allow(missing_docs)] - pub delegatedAddress: alloy::sol_types::private::Address, + pub coprocessorTxSenderAddresses: alloy::sol_types::private::Vec< + alloy::sol_types::private::Address, + >, } #[allow( non_camel_case_types, @@ -2478,13 +2273,17 @@ struct DelegationAccounts { address delegatorAddress; address delegatedAddress; use alloy::sol_types as alloy_sol_types; #[doc(hidden)] type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Address, - alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Array, ); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Address, - alloy::sol_types::private::Address, + alloy::sol_types::private::FixedBytes<32>, + alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::FixedBytes<32>, + alloy::sol_types::private::Vec, ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] @@ -2499,35 +2298,50 @@ struct DelegationAccounts { address delegatorAddress; address delegatedAddress; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: DelegationAccounts) -> Self { - (value.delegatorAddress, value.delegatedAddress) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: SnsCiphertextMaterial) -> Self { + ( + value.ctHandle, + value.keyId, + value.snsCiphertextDigest, + value.coprocessorTxSenderAddresses, + ) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for DelegationAccounts { + impl ::core::convert::From> for SnsCiphertextMaterial { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { - delegatorAddress: tuple.0, - delegatedAddress: tuple.1, + ctHandle: tuple.0, + keyId: tuple.1, + snsCiphertextDigest: tuple.2, + coprocessorTxSenderAddresses: tuple.3, } } } #[automatically_derived] - impl alloy_sol_types::SolValue for DelegationAccounts { + impl alloy_sol_types::SolValue for SnsCiphertextMaterial { type SolType = Self; } #[automatically_derived] - impl alloy_sol_types::private::SolTypeValue for DelegationAccounts { + impl alloy_sol_types::private::SolTypeValue for SnsCiphertextMaterial { #[inline] fn stv_to_tokens(&self) -> ::Token<'_> { ( - ::tokenize( - &self.delegatorAddress, - ), - ::tokenize( - &self.delegatedAddress, + as alloy_sol_types::SolType>::tokenize(&self.ctHandle), + as alloy_sol_types::SolType>::tokenize(&self.keyId), + as alloy_sol_types::SolType>::tokenize(&self.snsCiphertextDigest), + as alloy_sol_types::SolType>::tokenize( + &self.coprocessorTxSenderAddresses, ), ) } @@ -2573,7 +2387,7 @@ struct DelegationAccounts { address delegatorAddress; address delegatedAddress; } } #[automatically_derived] - impl alloy_sol_types::SolType for DelegationAccounts { + impl alloy_sol_types::SolType for SnsCiphertextMaterial { type RustType = Self; type Token<'a> = alloy_sol_types::private::Cow<'static, str> { alloy_sol_types::private::Cow::Borrowed( - "DelegationAccounts(address delegatorAddress,address delegatedAddress)", + "SnsCiphertextMaterial(bytes32 ctHandle,uint256 keyId,bytes32 snsCiphertextDigest,address[] coprocessorTxSenderAddresses)", ) } #[inline] @@ -2619,258 +2433,13 @@ struct DelegationAccounts { address delegatorAddress; address delegatedAddress; #[inline] fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { [ - ::eip712_data_word( - &self.delegatorAddress, - ) + as alloy_sol_types::SolType>::eip712_data_word(&self.ctHandle) .0, - ::eip712_data_word( - &self.delegatedAddress, - ) - .0, - ] - .concat() - } - } - #[automatically_derived] - impl alloy_sol_types::EventTopic for DelegationAccounts { - #[inline] - fn topic_preimage_length(rust: &Self::RustType) -> usize { - 0usize - + ::topic_preimage_length( - &rust.delegatorAddress, - ) - + ::topic_preimage_length( - &rust.delegatedAddress, - ) - } - #[inline] - fn encode_topic_preimage( - rust: &Self::RustType, - out: &mut alloy_sol_types::private::Vec, - ) { - out.reserve( - ::topic_preimage_length(rust), - ); - ::encode_topic_preimage( - &rust.delegatorAddress, - out, - ); - ::encode_topic_preimage( - &rust.delegatedAddress, - out, - ); - } - #[inline] - fn encode_topic( - rust: &Self::RustType, - ) -> alloy_sol_types::abi::token::WordToken { - let mut out = alloy_sol_types::private::Vec::new(); - ::encode_topic_preimage( - rust, - &mut out, - ); - alloy_sol_types::abi::token::WordToken( - alloy_sol_types::private::keccak256(out), - ) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**```solidity -struct SnsCiphertextMaterial { bytes32 ctHandle; uint256 keyId; bytes32 snsCiphertextDigest; address[] coprocessorTxSenderAddresses; } -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct SnsCiphertextMaterial { - #[allow(missing_docs)] - pub ctHandle: alloy::sol_types::private::FixedBytes<32>, - #[allow(missing_docs)] - pub keyId: alloy::sol_types::private::primitives::aliases::U256, - #[allow(missing_docs)] - pub snsCiphertextDigest: alloy::sol_types::private::FixedBytes<32>, - #[allow(missing_docs)] - pub coprocessorTxSenderAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Uint<256>, - alloy::sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Array, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::FixedBytes<32>, - alloy::sol_types::private::primitives::aliases::U256, - alloy::sol_types::private::FixedBytes<32>, - alloy::sol_types::private::Vec, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: SnsCiphertextMaterial) -> Self { - ( - value.ctHandle, - value.keyId, - value.snsCiphertextDigest, - value.coprocessorTxSenderAddresses, - ) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for SnsCiphertextMaterial { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - ctHandle: tuple.0, - keyId: tuple.1, - snsCiphertextDigest: tuple.2, - coprocessorTxSenderAddresses: tuple.3, - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolValue for SnsCiphertextMaterial { - type SolType = Self; - } - #[automatically_derived] - impl alloy_sol_types::private::SolTypeValue for SnsCiphertextMaterial { - #[inline] - fn stv_to_tokens(&self) -> ::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.ctHandle), - as alloy_sol_types::SolType>::tokenize(&self.keyId), - as alloy_sol_types::SolType>::tokenize(&self.snsCiphertextDigest), - as alloy_sol_types::SolType>::tokenize( - &self.coprocessorTxSenderAddresses, - ), - ) - } - #[inline] - fn stv_abi_encoded_size(&self) -> usize { - if let Some(size) = ::ENCODED_SIZE { - return size; - } - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_encoded_size(&tuple) - } - #[inline] - fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { - ::eip712_hash_struct(self) - } - #[inline] - fn stv_abi_encode_packed_to( - &self, - out: &mut alloy_sol_types::private::Vec, - ) { - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out) - } - #[inline] - fn stv_abi_packed_encoded_size(&self) -> usize { - if let Some(size) = ::PACKED_ENCODED_SIZE { - return size; - } - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple) - } - } - #[automatically_derived] - impl alloy_sol_types::SolType for SnsCiphertextMaterial { - type RustType = Self; - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SOL_NAME: &'static str = ::NAME; - const ENCODED_SIZE: Option = as alloy_sol_types::SolType>::ENCODED_SIZE; - const PACKED_ENCODED_SIZE: Option = as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; - #[inline] - fn valid_token(token: &Self::Token<'_>) -> bool { - as alloy_sol_types::SolType>::valid_token(token) - } - #[inline] - fn detokenize(token: Self::Token<'_>) -> Self::RustType { - let tuple = as alloy_sol_types::SolType>::detokenize(token); - >>::from(tuple) - } - } - #[automatically_derived] - impl alloy_sol_types::SolStruct for SnsCiphertextMaterial { - const NAME: &'static str = "SnsCiphertextMaterial"; - #[inline] - fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { - alloy_sol_types::private::Cow::Borrowed( - "SnsCiphertextMaterial(bytes32 ctHandle,uint256 keyId,bytes32 snsCiphertextDigest,address[] coprocessorTxSenderAddresses)", - ) - } - #[inline] - fn eip712_components() -> alloy_sol_types::private::Vec< - alloy_sol_types::private::Cow<'static, str>, - > { - alloy_sol_types::private::Vec::new() - } - #[inline] - fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { - ::eip712_root_type() - } - #[inline] - fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { - [ - as alloy_sol_types::SolType>::eip712_data_word(&self.ctHandle) - .0, - as alloy_sol_types::SolType>::eip712_data_word(&self.keyId) + as alloy_sol_types::SolType>::eip712_data_word(&self.keyId) .0, Self::Token<'_> { ( - as alloy_sol_types::SolType>::tokenize(&self.ctHandle), - ::tokenize( - &self.accountAddress, - ), - ) - } - #[inline] - fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Self::new) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `AccountNotDelegatedForContracts(uint256,(address,address),address[])` and selector `0x080a113f`. -```solidity -error AccountNotDelegatedForContracts(uint256 chainId, DelegationAccounts delegationAccounts, address[] contractAddresses); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct AccountNotDelegatedForContracts { - #[allow(missing_docs)] - pub chainId: alloy::sol_types::private::primitives::aliases::U256, - #[allow(missing_docs)] - pub delegationAccounts: ::RustType, - #[allow(missing_docs)] - pub contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ::RustType, - alloy::sol_types::private::Vec, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: AccountNotDelegatedForContracts) -> Self { - (value.chainId, value.delegationAccounts, value.contractAddresses) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for AccountNotDelegatedForContracts { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - chainId: tuple.0, - delegationAccounts: tuple.1, - contractAddresses: tuple.2, - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolError for AccountNotDelegatedForContracts { - type Parameters<'a> = UnderlyingSolTuple<'a>; - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "AccountNotDelegatedForContracts(uint256,(address,address),address[])"; - const SELECTOR: [u8; 4] = [8u8, 10u8, 17u8, 63u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.chainId), - ::tokenize( - &self.delegationAccounts, + as alloy_sol_types::SolType>::tokenize(&self.ctHandle), + ::tokenize( + &self.accountAddress, ), - as alloy_sol_types::SolType>::tokenize(&self.contractAddresses), ) } #[inline] @@ -3520,104 +2983,6 @@ error DecryptionNotRequested(uint256 decryptionId); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `DelegatorAddressInContractAddresses(address,address[])` and selector `0xc3446ac7`. -```solidity -error DelegatorAddressInContractAddresses(address delegatorAddress, address[] contractAddresses); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct DelegatorAddressInContractAddresses { - #[allow(missing_docs)] - pub delegatorAddress: alloy::sol_types::private::Address, - #[allow(missing_docs)] - pub contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Address, - alloy::sol_types::sol_data::Array, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Address, - alloy::sol_types::private::Vec, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: DelegatorAddressInContractAddresses) -> Self { - (value.delegatorAddress, value.contractAddresses) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for DelegatorAddressInContractAddresses { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - delegatorAddress: tuple.0, - contractAddresses: tuple.1, - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolError for DelegatorAddressInContractAddresses { - type Parameters<'a> = UnderlyingSolTuple<'a>; - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "DelegatorAddressInContractAddresses(address,address[])"; - const SELECTOR: [u8; 4] = [195u8, 68u8, 106u8, 199u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - ::tokenize( - &self.delegatorAddress, - ), - as alloy_sol_types::SolType>::tokenize(&self.contractAddresses), - ) - } - #[inline] - fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Self::new) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Custom error with signature `DifferentKeyIdsNotAllowed((bytes32,uint256,bytes32,address[]),(bytes32,uint256,bytes32,address[]))` and selector `0xcfae921f`. ```solidity error DifferentKeyIdsNotAllowed(SnsCiphertextMaterial firstSnsCtMaterial, SnsCiphertextMaterial invalidSnsCtMaterial); @@ -7952,184 +7317,7 @@ function UPGRADE_INTERFACE_VERSION() external view returns (string memory); #[doc(hidden)] type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: UPGRADE_INTERFACE_VERSIONCall) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for UPGRADE_INTERFACE_VERSIONCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self - } - } - } - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: UPGRADE_INTERFACE_VERSIONReturn) -> Self { - (value._0,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for UPGRADE_INTERFACE_VERSIONReturn { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolCall for UPGRADE_INTERFACE_VERSIONCall { - type Parameters<'a> = (); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::String; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "UPGRADE_INTERFACE_VERSION()"; - const SELECTOR: [u8; 4] = [173u8, 60u8, 177u8, 204u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - () - } - #[inline] - fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - ( - ::tokenize( - ret, - ), - ) - } - #[inline] - fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); - r._0 - }) - } - #[inline] - fn abi_decode_returns_validate( - data: &[u8], - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); - r._0 - }) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `delegatedUserDecryptionRequest((bytes32,address)[],(uint256,uint256),(address,address),(uint256,address[]),bytes,bytes,bytes)` and selector `0x9fad5a2f`. -```solidity -function delegatedUserDecryptionRequest(CtHandleContractPair[] memory ctHandleContractPairs, IDecryption.RequestValidity memory requestValidity, DelegationAccounts memory delegationAccounts, IDecryption.ContractsInfo memory contractsInfo, bytes memory publicKey, bytes memory signature, bytes memory extraData) external; -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct delegatedUserDecryptionRequestCall { - #[allow(missing_docs)] - pub ctHandleContractPairs: alloy::sol_types::private::Vec< - ::RustType, - >, - #[allow(missing_docs)] - pub requestValidity: ::RustType, - #[allow(missing_docs)] - pub delegationAccounts: ::RustType, - #[allow(missing_docs)] - pub contractsInfo: ::RustType, - #[allow(missing_docs)] - pub publicKey: alloy::sol_types::private::Bytes, - #[allow(missing_docs)] - pub signature: alloy::sol_types::private::Bytes, - #[allow(missing_docs)] - pub extraData: alloy::sol_types::private::Bytes, - } - ///Container type for the return parameters of the [`delegatedUserDecryptionRequest((bytes32,address)[],(uint256,uint256),(address,address),(uint256,address[]),bytes,bytes,bytes)`](delegatedUserDecryptionRequestCall) function. - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct delegatedUserDecryptionRequestReturn {} - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Array, - IDecryption::RequestValidity, - DelegationAccounts, - IDecryption::ContractsInfo, - alloy::sol_types::sol_data::Bytes, - alloy::sol_types::sol_data::Bytes, - alloy::sol_types::sol_data::Bytes, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Vec< - ::RustType, - >, - ::RustType, - ::RustType, - ::RustType, - alloy::sol_types::private::Bytes, - alloy::sol_types::private::Bytes, - alloy::sol_types::private::Bytes, - ); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -8143,42 +7331,26 @@ function delegatedUserDecryptionRequest(CtHandleContractPair[] memory ctHandleCo } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: delegatedUserDecryptionRequestCall) -> Self { - ( - value.ctHandleContractPairs, - value.requestValidity, - value.delegationAccounts, - value.contractsInfo, - value.publicKey, - value.signature, - value.extraData, - ) + fn from(value: UPGRADE_INTERFACE_VERSIONCall) -> Self { + () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for delegatedUserDecryptionRequestCall { + for UPGRADE_INTERFACE_VERSIONCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - ctHandleContractPairs: tuple.0, - requestValidity: tuple.1, - delegationAccounts: tuple.2, - contractsInfo: tuple.3, - publicKey: tuple.4, - signature: tuple.5, - extraData: tuple.6, - } + Self } } } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -8192,51 +7364,34 @@ function delegatedUserDecryptionRequest(CtHandleContractPair[] memory ctHandleCo } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: delegatedUserDecryptionRequestReturn) -> Self { - () + fn from(value: UPGRADE_INTERFACE_VERSIONReturn) -> Self { + (value._0,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for delegatedUserDecryptionRequestReturn { + for UPGRADE_INTERFACE_VERSIONReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} + Self { _0: tuple.0 } } } } - impl delegatedUserDecryptionRequestReturn { - fn _tokenize( - &self, - ) -> ::ReturnToken< - '_, - > { - () - } - } #[automatically_derived] - impl alloy_sol_types::SolCall for delegatedUserDecryptionRequestCall { - type Parameters<'a> = ( - alloy::sol_types::sol_data::Array, - IDecryption::RequestValidity, - DelegationAccounts, - IDecryption::ContractsInfo, - alloy::sol_types::sol_data::Bytes, - alloy::sol_types::sol_data::Bytes, - alloy::sol_types::sol_data::Bytes, - ); + impl alloy_sol_types::SolCall for UPGRADE_INTERFACE_VERSIONCall { + type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = delegatedUserDecryptionRequestReturn; - type ReturnTuple<'a> = (); + type Return = alloy::sol_types::private::String; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "delegatedUserDecryptionRequest((bytes32,address)[],(uint256,uint256),(address,address),(uint256,address[]),bytes,bytes,bytes)"; - const SELECTOR: [u8; 4] = [159u8, 173u8, 90u8, 47u8]; + const SIGNATURE: &'static str = "UPGRADE_INTERFACE_VERSION()"; + const SELECTOR: [u8; 4] = [173u8, 60u8, 177u8, 204u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -8245,42 +7400,25 @@ function delegatedUserDecryptionRequest(CtHandleContractPair[] memory ctHandleCo } #[inline] fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize( - &self.ctHandleContractPairs, - ), - ::tokenize( - &self.requestValidity, - ), - ::tokenize( - &self.delegationAccounts, - ), - ::tokenize( - &self.contractsInfo, - ), - ::tokenize( - &self.publicKey, - ), - ::tokenize( - &self.signature, - ), - ::tokenize( - &self.extraData, - ), - ) + () } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - delegatedUserDecryptionRequestReturn::_tokenize(ret) + ( + ::tokenize( + ret, + ), + ) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(Into::into) + .map(|r| { + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); + r._0 + }) } #[inline] fn abi_decode_returns_validate( @@ -8289,7 +7427,10 @@ function delegatedUserDecryptionRequest(CtHandleContractPair[] memory ctHandleCo as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Into::into) + .map(|r| { + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); + r._0 + }) } } }; @@ -8842,159 +7983,8 @@ function initializeFromEmptyProxy() external; { #[doc(hidden)] type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: initializeFromEmptyProxyCall) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for initializeFromEmptyProxyCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self - } - } - } - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: initializeFromEmptyProxyReturn) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for initializeFromEmptyProxyReturn { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} - } - } - } - impl initializeFromEmptyProxyReturn { - fn _tokenize( - &self, - ) -> ::ReturnToken< - '_, - > { - () - } - } - #[automatically_derived] - impl alloy_sol_types::SolCall for initializeFromEmptyProxyCall { - type Parameters<'a> = (); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = initializeFromEmptyProxyReturn; - type ReturnTuple<'a> = (); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "initializeFromEmptyProxy()"; - const SELECTOR: [u8; 4] = [57u8, 247u8, 56u8, 16u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - () - } - #[inline] - fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - initializeFromEmptyProxyReturn::_tokenize(ret) - } - #[inline] - fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(Into::into) - } - #[inline] - fn abi_decode_returns_validate( - data: &[u8], - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Into::into) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `isDecryptionDone(uint256)` and selector `0x58f5b8ab`. -```solidity -function isDecryptionDone(uint256 decryptionId) external view returns (bool); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct isDecryptionDoneCall { - #[allow(missing_docs)] - pub decryptionId: alloy::sol_types::private::primitives::aliases::U256, - } - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`isDecryptionDone(uint256)`](isDecryptionDoneCall) function. - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct isDecryptionDoneReturn { - #[allow(missing_docs)] - pub _0: bool, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -9008,26 +7998,26 @@ function isDecryptionDone(uint256 decryptionId) external view returns (bool); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: isDecryptionDoneCall) -> Self { - (value.decryptionId,) + fn from(value: initializeFromEmptyProxyCall) -> Self { + () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for isDecryptionDoneCall { + for initializeFromEmptyProxyCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { decryptionId: tuple.0 } + Self } } } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (bool,); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -9041,34 +8031,43 @@ function isDecryptionDone(uint256 decryptionId) external view returns (bool); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: isDecryptionDoneReturn) -> Self { - (value._0,) + fn from(value: initializeFromEmptyProxyReturn) -> Self { + () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for isDecryptionDoneReturn { + for initializeFromEmptyProxyReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } + Self {} } } } + impl initializeFromEmptyProxyReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } #[automatically_derived] - impl alloy_sol_types::SolCall for isDecryptionDoneCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + impl alloy_sol_types::SolCall for initializeFromEmptyProxyCall { + type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = bool; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type Return = initializeFromEmptyProxyReturn; + type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "isDecryptionDone(uint256)"; - const SELECTOR: [u8; 4] = [88u8, 245u8, 184u8, 171u8]; + const SIGNATURE: &'static str = "initializeFromEmptyProxy()"; + const SELECTOR: [u8; 4] = [57u8, 247u8, 56u8, 16u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -9077,29 +8076,18 @@ function isDecryptionDone(uint256 decryptionId) external view returns (bool); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.decryptionId), - ) + () } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - ( - ::tokenize( - ret, - ), - ) + initializeFromEmptyProxyReturn::_tokenize(ret) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: isDecryptionDoneReturn = r.into(); - r._0 - }) + .map(Into::into) } #[inline] fn abi_decode_returns_validate( @@ -9108,43 +8096,28 @@ function isDecryptionDone(uint256 decryptionId) external view returns (bool); as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: isDecryptionDoneReturn = r.into(); - r._0 - }) + .map(Into::into) } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `isDelegatedUserDecryptionReady(uint256,(address,address),(bytes32,address)[],address[],bytes)` and selector `0xb6e9a9b3`. + /**Function with signature `isDecryptionDone(uint256)` and selector `0x58f5b8ab`. ```solidity -function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAccounts memory delegationAccounts, CtHandleContractPair[] memory ctHandleContractPairs, address[] memory contractAddresses, bytes memory) external view returns (bool); +function isDecryptionDone(uint256 decryptionId) external view returns (bool); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct isDelegatedUserDecryptionReadyCall { - #[allow(missing_docs)] - pub contractsChainId: alloy::sol_types::private::primitives::aliases::U256, - #[allow(missing_docs)] - pub delegationAccounts: ::RustType, - #[allow(missing_docs)] - pub ctHandleContractPairs: alloy::sol_types::private::Vec< - ::RustType, - >, - #[allow(missing_docs)] - pub contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, + pub struct isDecryptionDoneCall { #[allow(missing_docs)] - pub _4: alloy::sol_types::private::Bytes, + pub decryptionId: alloy::sol_types::private::primitives::aliases::U256, } #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`isDelegatedUserDecryptionReady(uint256,(address,address),(bytes32,address)[],address[],bytes)`](isDelegatedUserDecryptionReadyCall) function. + ///Container type for the return parameters of the [`isDecryptionDone(uint256)`](isDecryptionDoneCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct isDelegatedUserDecryptionReadyReturn { + pub struct isDecryptionDoneReturn { #[allow(missing_docs)] pub _0: bool, } @@ -9158,22 +8131,10 @@ function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAcco use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, - alloy::sol_types::sol_data::Array, - alloy::sol_types::sol_data::Bytes, - ); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( alloy::sol_types::private::primitives::aliases::U256, - ::RustType, - alloy::sol_types::private::Vec< - ::RustType, - >, - alloy::sol_types::private::Vec, - alloy::sol_types::private::Bytes, ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] @@ -9188,30 +8149,18 @@ function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAcco } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: isDelegatedUserDecryptionReadyCall) -> Self { - ( - value.contractsChainId, - value.delegationAccounts, - value.ctHandleContractPairs, - value.contractAddresses, - value._4, - ) + fn from(value: isDecryptionDoneCall) -> Self { + (value.decryptionId,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for isDelegatedUserDecryptionReadyCall { + for isDecryptionDoneCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - contractsChainId: tuple.0, - delegationAccounts: tuple.1, - ctHandleContractPairs: tuple.2, - contractAddresses: tuple.3, - _4: tuple.4, - } + Self { decryptionId: tuple.0 } } } } @@ -9233,30 +8182,24 @@ function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAcco } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: isDelegatedUserDecryptionReadyReturn) -> Self { + fn from(value: isDecryptionDoneReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for isDelegatedUserDecryptionReadyReturn { + for isDecryptionDoneReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for isDelegatedUserDecryptionReadyCall { - type Parameters<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, - alloy::sol_types::sol_data::Array, - alloy::sol_types::sol_data::Bytes, - ); + impl alloy_sol_types::SolCall for isDecryptionDoneCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; @@ -9265,8 +8208,8 @@ function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAcco type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "isDelegatedUserDecryptionReady(uint256,(address,address),(bytes32,address)[],address[],bytes)"; - const SELECTOR: [u8; 4] = [182u8, 233u8, 169u8, 179u8]; + const SIGNATURE: &'static str = "isDecryptionDone(uint256)"; + const SELECTOR: [u8; 4] = [88u8, 245u8, 184u8, 171u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -9278,21 +8221,7 @@ function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAcco ( as alloy_sol_types::SolType>::tokenize(&self.contractsChainId), - ::tokenize( - &self.delegationAccounts, - ), - as alloy_sol_types::SolType>::tokenize( - &self.ctHandleContractPairs, - ), - as alloy_sol_types::SolType>::tokenize(&self.contractAddresses), - ::tokenize( - &self._4, - ), + > as alloy_sol_types::SolType>::tokenize(&self.decryptionId), ) } #[inline] @@ -9309,7 +8238,7 @@ function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAcco '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: isDelegatedUserDecryptionReadyReturn = r.into(); + let r: isDecryptionDoneReturn = r.into(); r._0 }) } @@ -9321,7 +8250,7 @@ function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAcco '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: isDelegatedUserDecryptionReadyReturn = r.into(); + let r: isDecryptionDoneReturn = r.into(); r._0 }) } @@ -11191,8 +10120,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted #[allow(missing_docs)] UPGRADE_INTERFACE_VERSION(UPGRADE_INTERFACE_VERSIONCall), #[allow(missing_docs)] - delegatedUserDecryptionRequest(delegatedUserDecryptionRequestCall), - #[allow(missing_docs)] eip712Domain(eip712DomainCall), #[allow(missing_docs)] getDecryptionConsensusTxSenders(getDecryptionConsensusTxSendersCall), @@ -11203,8 +10130,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted #[allow(missing_docs)] isDecryptionDone(isDecryptionDoneCall), #[allow(missing_docs)] - isDelegatedUserDecryptionReady(isDelegatedUserDecryptionReadyCall), - #[allow(missing_docs)] isPublicDecryptionReady(isPublicDecryptionReadyCall), #[allow(missing_docs)] isUserDecryptionReady(isUserDecryptionReadyCall), @@ -11249,9 +10174,7 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted [111u8, 137u8, 19u8, 188u8], [132u8, 86u8, 203u8, 89u8], [132u8, 176u8, 25u8, 110u8], - [159u8, 173u8, 90u8, 47u8], [173u8, 60u8, 177u8, 204u8], - [182u8, 233u8, 169u8, 179u8], [216u8, 153u8, 143u8, 69u8], [241u8, 181u8, 122u8, 219u8], [251u8, 184u8, 50u8, 89u8], @@ -11261,16 +10184,13 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted impl alloy_sol_types::SolInterface for DecryptionCalls { const NAME: &'static str = "DecryptionCalls"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 19usize; + const COUNT: usize = 17usize; #[inline] fn selector(&self) -> [u8; 4] { match self { Self::UPGRADE_INTERFACE_VERSION(_) => { ::SELECTOR } - Self::delegatedUserDecryptionRequest(_) => { - ::SELECTOR - } Self::eip712Domain(_) => { ::SELECTOR } @@ -11286,9 +10206,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted Self::isDecryptionDone(_) => { ::SELECTOR } - Self::isDelegatedUserDecryptionReady(_) => { - ::SELECTOR - } Self::isPublicDecryptionReady(_) => { ::SELECTOR } @@ -11466,17 +10383,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted } eip712Domain }, - { - fn delegatedUserDecryptionRequest( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(DecryptionCalls::delegatedUserDecryptionRequest) - } - delegatedUserDecryptionRequest - }, { fn UPGRADE_INTERFACE_VERSION( data: &[u8], @@ -11488,17 +10394,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted } UPGRADE_INTERFACE_VERSION }, - { - fn isDelegatedUserDecryptionReady( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(DecryptionCalls::isDelegatedUserDecryptionReady) - } - isDelegatedUserDecryptionReady - }, { fn publicDecryptionRequest( data: &[u8], @@ -11689,17 +10584,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted } eip712Domain }, - { - fn delegatedUserDecryptionRequest( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(DecryptionCalls::delegatedUserDecryptionRequest) - } - delegatedUserDecryptionRequest - }, { fn UPGRADE_INTERFACE_VERSION( data: &[u8], @@ -11711,17 +10595,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted } UPGRADE_INTERFACE_VERSION }, - { - fn isDelegatedUserDecryptionReady( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(DecryptionCalls::isDelegatedUserDecryptionReady) - } - isDelegatedUserDecryptionReady - }, { fn publicDecryptionRequest( data: &[u8], @@ -11774,11 +10647,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted inner, ) } - Self::delegatedUserDecryptionRequest(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::eip712Domain(inner) => { ::abi_encoded_size( inner, @@ -11802,11 +10670,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted inner, ) } - Self::isDelegatedUserDecryptionReady(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::isPublicDecryptionReady(inner) => { ::abi_encoded_size( inner, @@ -11867,12 +10730,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted out, ) } - Self::delegatedUserDecryptionRequest(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::eip712Domain(inner) => { ::abi_encode_raw( inner, @@ -11903,12 +10760,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted out, ) } - Self::isDelegatedUserDecryptionReady(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::isPublicDecryptionReady(inner) => { ::abi_encode_raw( inner, @@ -11976,8 +10827,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted #[allow(missing_docs)] AccountNotAllowedToUseCiphertext(AccountNotAllowedToUseCiphertext), #[allow(missing_docs)] - AccountNotDelegatedForContracts(AccountNotDelegatedForContracts), - #[allow(missing_docs)] AddressEmptyCode(AddressEmptyCode), #[allow(missing_docs)] ContractAddressesMaxLengthExceeded(ContractAddressesMaxLengthExceeded), @@ -11986,8 +10835,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted #[allow(missing_docs)] DecryptionNotRequested(DecryptionNotRequested), #[allow(missing_docs)] - DelegatorAddressInContractAddresses(DelegatorAddressInContractAddresses), - #[allow(missing_docs)] DifferentKeyIdsNotAllowed(DifferentKeyIdsNotAllowed), #[allow(missing_docs)] ECDSAInvalidSignature(ECDSAInvalidSignature), @@ -12073,7 +10920,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted /// /// Prefer using `SolInterface` methods instead. pub const SELECTORS: &'static [[u8; 4usize]] = &[ - [8u8, 10u8, 17u8, 63u8], [14u8, 86u8, 207u8, 61u8], [22u8, 10u8, 43u8, 75u8], [38u8, 205u8, 117u8, 220u8], @@ -12101,7 +10947,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted [179u8, 152u8, 151u8, 159u8], [182u8, 103u8, 156u8, 59u8], [190u8, 120u8, 48u8, 177u8], - [195u8, 68u8, 106u8, 199u8], [207u8, 174u8, 146u8, 31u8], [212u8, 138u8, 249u8, 66u8], [214u8, 189u8, 162u8, 117u8], @@ -12124,16 +10969,13 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted impl alloy_sol_types::SolInterface for DecryptionErrors { const NAME: &'static str = "DecryptionErrors"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 45usize; + const COUNT: usize = 43usize; #[inline] fn selector(&self) -> [u8; 4] { match self { Self::AccountNotAllowedToUseCiphertext(_) => { ::SELECTOR } - Self::AccountNotDelegatedForContracts(_) => { - ::SELECTOR - } Self::AddressEmptyCode(_) => { ::SELECTOR } @@ -12146,9 +10988,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted Self::DecryptionNotRequested(_) => { ::SELECTOR } - Self::DelegatorAddressInContractAddresses(_) => { - ::SELECTOR - } Self::DifferentKeyIdsNotAllowed(_) => { ::SELECTOR } @@ -12282,17 +11121,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted static DECODE_SHIMS: &[fn( &[u8], ) -> alloy_sol_types::Result] = &[ - { - fn AccountNotDelegatedForContracts( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(DecryptionErrors::AccountNotDelegatedForContracts) - } - AccountNotDelegatedForContracts - }, { fn NotGatewayOwner( data: &[u8], @@ -12588,17 +11416,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted } UnsupportedFHEType }, - { - fn DelegatorAddressInContractAddresses( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(DecryptionErrors::DelegatorAddressInContractAddresses) - } - DelegatorAddressInContractAddresses - }, { fn DifferentKeyIdsNotAllowed( data: &[u8], @@ -12793,17 +11610,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted static DECODE_VALIDATE_SHIMS: &[fn( &[u8], ) -> alloy_sol_types::Result] = &[ - { - fn AccountNotDelegatedForContracts( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(DecryptionErrors::AccountNotDelegatedForContracts) - } - AccountNotDelegatedForContracts - }, { fn NotGatewayOwner( data: &[u8], @@ -13101,17 +11907,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted } UnsupportedFHEType }, - { - fn DelegatorAddressInContractAddresses( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(DecryptionErrors::DelegatorAddressInContractAddresses) - } - DelegatorAddressInContractAddresses - }, { fn DifferentKeyIdsNotAllowed( data: &[u8], @@ -13307,11 +12102,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted inner, ) } - Self::AccountNotDelegatedForContracts(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::AddressEmptyCode(inner) => { ::abi_encoded_size( inner, @@ -13332,11 +12122,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted inner, ) } - Self::DelegatorAddressInContractAddresses(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::DifferentKeyIdsNotAllowed(inner) => { ::abi_encoded_size( inner, @@ -13530,12 +12315,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted out, ) } - Self::AccountNotDelegatedForContracts(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::AddressEmptyCode(inner) => { ::abi_encode_raw( inner, @@ -13560,12 +12339,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted out, ) } - Self::DelegatorAddressInContractAddresses(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::DifferentKeyIdsNotAllowed(inner) => { ::abi_encode_raw( inner, @@ -14212,31 +12985,6 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder<&P, UPGRADE_INTERFACE_VERSIONCall, N> { self.call_builder(&UPGRADE_INTERFACE_VERSIONCall) } - ///Creates a new call builder for the [`delegatedUserDecryptionRequest`] function. - pub fn delegatedUserDecryptionRequest( - &self, - ctHandleContractPairs: alloy::sol_types::private::Vec< - ::RustType, - >, - requestValidity: ::RustType, - delegationAccounts: ::RustType, - contractsInfo: ::RustType, - publicKey: alloy::sol_types::private::Bytes, - signature: alloy::sol_types::private::Bytes, - extraData: alloy::sol_types::private::Bytes, - ) -> alloy_contract::SolCallBuilder<&P, delegatedUserDecryptionRequestCall, N> { - self.call_builder( - &delegatedUserDecryptionRequestCall { - ctHandleContractPairs, - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - signature, - extraData, - }, - ) - } ///Creates a new call builder for the [`eip712Domain`] function. pub fn eip712Domain( &self, @@ -14277,29 +13025,6 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ }, ) } - ///Creates a new call builder for the [`isDelegatedUserDecryptionReady`] function. - pub fn isDelegatedUserDecryptionReady( - &self, - contractsChainId: alloy::sol_types::private::primitives::aliases::U256, - delegationAccounts: ::RustType, - ctHandleContractPairs: alloy::sol_types::private::Vec< - ::RustType, - >, - contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - _4: alloy::sol_types::private::Bytes, - ) -> alloy_contract::SolCallBuilder<&P, isDelegatedUserDecryptionReadyCall, N> { - self.call_builder( - &isDelegatedUserDecryptionReadyCall { - contractsChainId, - delegationAccounts, - ctHandleContractPairs, - contractAddresses, - _4, - }, - ) - } ///Creates a new call builder for the [`isPublicDecryptionReady`] function. pub fn isPublicDecryptionReady( &self, diff --git a/gateway-contracts/rust_bindings/src/i_decryption.rs b/gateway-contracts/rust_bindings/src/i_decryption.rs index 57304207d..e2ecde020 100644 --- a/gateway-contracts/rust_bindings/src/i_decryption.rs +++ b/gateway-contracts/rust_bindings/src/i_decryption.rs @@ -11,10 +11,6 @@ interface IDecryption { bytes32 ctHandle; address contractAddress; } - struct DelegationAccounts { - address delegatorAddress; - address delegatedAddress; - } struct RequestValidity { uint256 startTimestamp; uint256 durationDays; @@ -29,7 +25,6 @@ interface IDecryption { error ContractAddressesMaxLengthExceeded(uint256 maxLength, uint256 actualLength); error ContractNotInContractAddresses(address contractAddress, address[] contractAddresses); error DecryptionNotRequested(uint256 decryptionId); - error DelegatorAddressInContractAddresses(address delegatorAddress, address[] contractAddresses); error DifferentKeyIdsNotAllowed(SnsCiphertextMaterial firstSnsCtMaterial, SnsCiphertextMaterial invalidSnsCtMaterial); error EmptyContractAddresses(); error EmptyCtHandleContractPairs(); @@ -49,11 +44,9 @@ interface IDecryption { event UserDecryptionResponse(uint256 indexed decryptionId, uint256 indexShare, bytes userDecryptedShare, bytes signature, bytes extraData); event UserDecryptionResponseThresholdReached(uint256 indexed decryptionId); - function delegatedUserDecryptionRequest(CtHandleContractPair[] memory ctHandleContractPairs, RequestValidity memory requestValidity, DelegationAccounts memory delegationAccounts, ContractsInfo memory contractsInfo, bytes memory publicKey, bytes memory signature, bytes memory extraData) external; function getDecryptionConsensusTxSenders(uint256 decryptionId) external view returns (address[] memory); function getVersion() external pure returns (string memory); function isDecryptionDone(uint256 decryptionId) external view returns (bool); - function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAccounts memory delegationAccounts, CtHandleContractPair[] memory ctHandleContractPairs, address[] memory contractAddresses, bytes memory extraData) external view returns (bool); function isPublicDecryptionReady(bytes32[] memory ctHandles, bytes memory extraData) external view returns (bool); function isUserDecryptionReady(address userAddress, CtHandleContractPair[] memory ctHandleContractPairs, bytes memory extraData) external view returns (bool); function publicDecryptionRequest(bytes32[] memory ctHandles, bytes memory extraData) external; @@ -66,97 +59,6 @@ interface IDecryption { ...which was generated by the following JSON ABI: ```json [ - { - "type": "function", - "name": "delegatedUserDecryptionRequest", - "inputs": [ - { - "name": "ctHandleContractPairs", - "type": "tuple[]", - "internalType": "struct CtHandleContractPair[]", - "components": [ - { - "name": "ctHandle", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "contractAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "requestValidity", - "type": "tuple", - "internalType": "struct IDecryption.RequestValidity", - "components": [ - { - "name": "startTimestamp", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "durationDays", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "delegationAccounts", - "type": "tuple", - "internalType": "struct DelegationAccounts", - "components": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegatedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "contractsInfo", - "type": "tuple", - "internalType": "struct IDecryption.ContractsInfo", - "components": [ - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "addresses", - "type": "address[]", - "internalType": "address[]" - } - ] - }, - { - "name": "publicKey", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "signature", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "extraData", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, { "type": "function", "name": "getDecryptionConsensusTxSenders", @@ -208,69 +110,6 @@ interface IDecryption { ], "stateMutability": "view" }, - { - "type": "function", - "name": "isDelegatedUserDecryptionReady", - "inputs": [ - { - "name": "contractsChainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "delegationAccounts", - "type": "tuple", - "internalType": "struct DelegationAccounts", - "components": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegatedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "ctHandleContractPairs", - "type": "tuple[]", - "internalType": "struct CtHandleContractPair[]", - "components": [ - { - "name": "ctHandle", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "contractAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "contractAddresses", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "extraData", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, { "type": "function", "name": "isPublicDecryptionReady", @@ -719,22 +558,6 @@ interface IDecryption { } ] }, - { - "type": "error", - "name": "DelegatorAddressInContractAddresses", - "inputs": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "contractAddresses", - "type": "address[]", - "internalType": "address[]" - } - ] - }, { "type": "error", "name": "DifferentKeyIdsNotAllowed", @@ -1423,15 +1246,15 @@ struct CtHandleContractPair { bytes32 ctHandle; address contractAddress; } #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] /**```solidity -struct DelegationAccounts { address delegatorAddress; address delegatedAddress; } +struct RequestValidity { uint256 startTimestamp; uint256 durationDays; } ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct DelegationAccounts { + pub struct RequestValidity { #[allow(missing_docs)] - pub delegatorAddress: alloy::sol_types::private::Address, + pub startTimestamp: alloy::sol_types::private::primitives::aliases::U256, #[allow(missing_docs)] - pub delegatedAddress: alloy::sol_types::private::Address, + pub durationDays: alloy::sol_types::private::primitives::aliases::U256, } #[allow( non_camel_case_types, @@ -1443,13 +1266,13 @@ struct DelegationAccounts { address delegatorAddress; address delegatedAddress; use alloy::sol_types as alloy_sol_types; #[doc(hidden)] type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Address, - alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Uint<256>, ); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Address, - alloy::sol_types::private::Address, + alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::primitives::aliases::U256, ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] @@ -1464,36 +1287,36 @@ struct DelegationAccounts { address delegatorAddress; address delegatedAddress; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: DelegationAccounts) -> Self { - (value.delegatorAddress, value.delegatedAddress) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: RequestValidity) -> Self { + (value.startTimestamp, value.durationDays) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for DelegationAccounts { + impl ::core::convert::From> for RequestValidity { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { - delegatorAddress: tuple.0, - delegatedAddress: tuple.1, + startTimestamp: tuple.0, + durationDays: tuple.1, } } } #[automatically_derived] - impl alloy_sol_types::SolValue for DelegationAccounts { + impl alloy_sol_types::SolValue for RequestValidity { type SolType = Self; } #[automatically_derived] - impl alloy_sol_types::private::SolTypeValue for DelegationAccounts { + impl alloy_sol_types::private::SolTypeValue for RequestValidity { #[inline] fn stv_to_tokens(&self) -> ::Token<'_> { ( - ::tokenize( - &self.delegatorAddress, - ), - ::tokenize( - &self.delegatedAddress, - ), + as alloy_sol_types::SolType>::tokenize(&self.startTimestamp), + as alloy_sol_types::SolType>::tokenize(&self.durationDays), ) } #[inline] @@ -1538,7 +1361,7 @@ struct DelegationAccounts { address delegatorAddress; address delegatedAddress; } } #[automatically_derived] - impl alloy_sol_types::SolType for DelegationAccounts { + impl alloy_sol_types::SolType for RequestValidity { type RustType = Self; type Token<'a> = alloy_sol_types::private::Cow<'static, str> { alloy_sol_types::private::Cow::Borrowed( - "DelegationAccounts(address delegatorAddress,address delegatedAddress)", + "RequestValidity(uint256 startTimestamp,uint256 durationDays)", ) } #[inline] @@ -1584,28 +1407,34 @@ struct DelegationAccounts { address delegatorAddress; address delegatedAddress; #[inline] fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { [ - ::eip712_data_word( - &self.delegatorAddress, + as alloy_sol_types::SolType>::eip712_data_word( + &self.startTimestamp, ) .0, - ::eip712_data_word( - &self.delegatedAddress, - ) + as alloy_sol_types::SolType>::eip712_data_word(&self.durationDays) .0, ] .concat() } } #[automatically_derived] - impl alloy_sol_types::EventTopic for DelegationAccounts { + impl alloy_sol_types::EventTopic for RequestValidity { #[inline] fn topic_preimage_length(rust: &Self::RustType) -> usize { 0usize - + ::topic_preimage_length( - &rust.delegatorAddress, + + as alloy_sol_types::EventTopic>::topic_preimage_length( + &rust.startTimestamp, ) - + ::topic_preimage_length( - &rust.delegatedAddress, + + as alloy_sol_types::EventTopic>::topic_preimage_length( + &rust.durationDays, ) } #[inline] @@ -1616,12 +1445,16 @@ struct DelegationAccounts { address delegatorAddress; address delegatedAddress; out.reserve( ::topic_preimage_length(rust), ); - ::encode_topic_preimage( - &rust.delegatorAddress, + as alloy_sol_types::EventTopic>::encode_topic_preimage( + &rust.startTimestamp, out, ); - ::encode_topic_preimage( - &rust.delegatedAddress, + as alloy_sol_types::EventTopic>::encode_topic_preimage( + &rust.durationDays, out, ); } @@ -1643,15 +1476,21 @@ struct DelegationAccounts { address delegatorAddress; address delegatedAddress; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] /**```solidity -struct RequestValidity { uint256 startTimestamp; uint256 durationDays; } +struct SnsCiphertextMaterial { bytes32 ctHandle; uint256 keyId; bytes32 snsCiphertextDigest; address[] coprocessorTxSenderAddresses; } ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct RequestValidity { + pub struct SnsCiphertextMaterial { #[allow(missing_docs)] - pub startTimestamp: alloy::sol_types::private::primitives::aliases::U256, + pub ctHandle: alloy::sol_types::private::FixedBytes<32>, #[allow(missing_docs)] - pub durationDays: alloy::sol_types::private::primitives::aliases::U256, + pub keyId: alloy::sol_types::private::primitives::aliases::U256, + #[allow(missing_docs)] + pub snsCiphertextDigest: alloy::sol_types::private::FixedBytes<32>, + #[allow(missing_docs)] + pub coprocessorTxSenderAddresses: alloy::sol_types::private::Vec< + alloy::sol_types::private::Address, + >, } #[allow( non_camel_case_types, @@ -1663,13 +1502,17 @@ struct RequestValidity { uint256 startTimestamp; uint256 durationDays; } use alloy::sol_types as alloy_sol_types; #[doc(hidden)] type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::FixedBytes<32>, alloy::sol_types::sol_data::Uint<256>, - alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Array, ); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::FixedBytes<32>, alloy::sol_types::private::primitives::aliases::U256, - alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::FixedBytes<32>, + alloy::sol_types::private::Vec, ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] @@ -1684,254 +1527,14 @@ struct RequestValidity { uint256 startTimestamp; uint256 durationDays; } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: RequestValidity) -> Self { - (value.startTimestamp, value.durationDays) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for RequestValidity { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - startTimestamp: tuple.0, - durationDays: tuple.1, - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolValue for RequestValidity { - type SolType = Self; - } - #[automatically_derived] - impl alloy_sol_types::private::SolTypeValue for RequestValidity { - #[inline] - fn stv_to_tokens(&self) -> ::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.startTimestamp), - as alloy_sol_types::SolType>::tokenize(&self.durationDays), - ) - } - #[inline] - fn stv_abi_encoded_size(&self) -> usize { - if let Some(size) = ::ENCODED_SIZE { - return size; - } - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_encoded_size(&tuple) - } - #[inline] - fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { - ::eip712_hash_struct(self) - } - #[inline] - fn stv_abi_encode_packed_to( - &self, - out: &mut alloy_sol_types::private::Vec, - ) { - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out) - } - #[inline] - fn stv_abi_packed_encoded_size(&self) -> usize { - if let Some(size) = ::PACKED_ENCODED_SIZE { - return size; - } - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple) - } - } - #[automatically_derived] - impl alloy_sol_types::SolType for RequestValidity { - type RustType = Self; - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SOL_NAME: &'static str = ::NAME; - const ENCODED_SIZE: Option = as alloy_sol_types::SolType>::ENCODED_SIZE; - const PACKED_ENCODED_SIZE: Option = as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; - #[inline] - fn valid_token(token: &Self::Token<'_>) -> bool { - as alloy_sol_types::SolType>::valid_token(token) - } - #[inline] - fn detokenize(token: Self::Token<'_>) -> Self::RustType { - let tuple = as alloy_sol_types::SolType>::detokenize(token); - >>::from(tuple) - } - } - #[automatically_derived] - impl alloy_sol_types::SolStruct for RequestValidity { - const NAME: &'static str = "RequestValidity"; - #[inline] - fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { - alloy_sol_types::private::Cow::Borrowed( - "RequestValidity(uint256 startTimestamp,uint256 durationDays)", - ) - } - #[inline] - fn eip712_components() -> alloy_sol_types::private::Vec< - alloy_sol_types::private::Cow<'static, str>, - > { - alloy_sol_types::private::Vec::new() - } - #[inline] - fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { - ::eip712_root_type() - } - #[inline] - fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { - [ - as alloy_sol_types::SolType>::eip712_data_word( - &self.startTimestamp, - ) - .0, - as alloy_sol_types::SolType>::eip712_data_word(&self.durationDays) - .0, - ] - .concat() - } - } - #[automatically_derived] - impl alloy_sol_types::EventTopic for RequestValidity { - #[inline] - fn topic_preimage_length(rust: &Self::RustType) -> usize { - 0usize - + as alloy_sol_types::EventTopic>::topic_preimage_length( - &rust.startTimestamp, - ) - + as alloy_sol_types::EventTopic>::topic_preimage_length( - &rust.durationDays, - ) - } - #[inline] - fn encode_topic_preimage( - rust: &Self::RustType, - out: &mut alloy_sol_types::private::Vec, - ) { - out.reserve( - ::topic_preimage_length(rust), - ); - as alloy_sol_types::EventTopic>::encode_topic_preimage( - &rust.startTimestamp, - out, - ); - as alloy_sol_types::EventTopic>::encode_topic_preimage( - &rust.durationDays, - out, - ); - } - #[inline] - fn encode_topic( - rust: &Self::RustType, - ) -> alloy_sol_types::abi::token::WordToken { - let mut out = alloy_sol_types::private::Vec::new(); - ::encode_topic_preimage( - rust, - &mut out, - ); - alloy_sol_types::abi::token::WordToken( - alloy_sol_types::private::keccak256(out), - ) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**```solidity -struct SnsCiphertextMaterial { bytes32 ctHandle; uint256 keyId; bytes32 snsCiphertextDigest; address[] coprocessorTxSenderAddresses; } -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct SnsCiphertextMaterial { - #[allow(missing_docs)] - pub ctHandle: alloy::sol_types::private::FixedBytes<32>, - #[allow(missing_docs)] - pub keyId: alloy::sol_types::private::primitives::aliases::U256, - #[allow(missing_docs)] - pub snsCiphertextDigest: alloy::sol_types::private::FixedBytes<32>, - #[allow(missing_docs)] - pub coprocessorTxSenderAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Uint<256>, - alloy::sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Array, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::FixedBytes<32>, - alloy::sol_types::private::primitives::aliases::U256, - alloy::sol_types::private::FixedBytes<32>, - alloy::sol_types::private::Vec, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: SnsCiphertextMaterial) -> Self { - ( - value.ctHandle, - value.keyId, - value.snsCiphertextDigest, - value.coprocessorTxSenderAddresses, - ) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: SnsCiphertextMaterial) -> Self { + ( + value.ctHandle, + value.keyId, + value.snsCiphertextDigest, + value.coprocessorTxSenderAddresses, + ) } } #[automatically_derived] @@ -2433,115 +2036,17 @@ error DecryptionNotRequested(uint256 decryptionId); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `DelegatorAddressInContractAddresses(address,address[])` and selector `0xc3446ac7`. + /**Custom error with signature `DifferentKeyIdsNotAllowed((bytes32,uint256,bytes32,address[]),(bytes32,uint256,bytes32,address[]))` and selector `0xcfae921f`. ```solidity -error DelegatorAddressInContractAddresses(address delegatorAddress, address[] contractAddresses); +error DifferentKeyIdsNotAllowed(SnsCiphertextMaterial firstSnsCtMaterial, SnsCiphertextMaterial invalidSnsCtMaterial); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct DelegatorAddressInContractAddresses { + pub struct DifferentKeyIdsNotAllowed { #[allow(missing_docs)] - pub delegatorAddress: alloy::sol_types::private::Address, + pub firstSnsCtMaterial: ::RustType, #[allow(missing_docs)] - pub contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Address, - alloy::sol_types::sol_data::Array, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Address, - alloy::sol_types::private::Vec, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: DelegatorAddressInContractAddresses) -> Self { - (value.delegatorAddress, value.contractAddresses) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for DelegatorAddressInContractAddresses { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - delegatorAddress: tuple.0, - contractAddresses: tuple.1, - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolError for DelegatorAddressInContractAddresses { - type Parameters<'a> = UnderlyingSolTuple<'a>; - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "DelegatorAddressInContractAddresses(address,address[])"; - const SELECTOR: [u8; 4] = [195u8, 68u8, 106u8, 199u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - ::tokenize( - &self.delegatorAddress, - ), - as alloy_sol_types::SolType>::tokenize(&self.contractAddresses), - ) - } - #[inline] - fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Self::new) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `DifferentKeyIdsNotAllowed((bytes32,uint256,bytes32,address[]),(bytes32,uint256,bytes32,address[]))` and selector `0xcfae921f`. -```solidity -error DifferentKeyIdsNotAllowed(SnsCiphertextMaterial firstSnsCtMaterial, SnsCiphertextMaterial invalidSnsCtMaterial); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct DifferentKeyIdsNotAllowed { - #[allow(missing_docs)] - pub firstSnsCtMaterial: ::RustType, - #[allow(missing_docs)] - pub invalidSnsCtMaterial: ::RustType, + pub invalidSnsCtMaterial: ::RustType, } #[allow( non_camel_case_types, @@ -4224,230 +3729,6 @@ event UserDecryptionResponseThresholdReached(uint256 indexed decryptionId); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `delegatedUserDecryptionRequest((bytes32,address)[],(uint256,uint256),(address,address),(uint256,address[]),bytes,bytes,bytes)` and selector `0x9fad5a2f`. -```solidity -function delegatedUserDecryptionRequest(CtHandleContractPair[] memory ctHandleContractPairs, RequestValidity memory requestValidity, DelegationAccounts memory delegationAccounts, ContractsInfo memory contractsInfo, bytes memory publicKey, bytes memory signature, bytes memory extraData) external; -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct delegatedUserDecryptionRequestCall { - #[allow(missing_docs)] - pub ctHandleContractPairs: alloy::sol_types::private::Vec< - ::RustType, - >, - #[allow(missing_docs)] - pub requestValidity: ::RustType, - #[allow(missing_docs)] - pub delegationAccounts: ::RustType, - #[allow(missing_docs)] - pub contractsInfo: ::RustType, - #[allow(missing_docs)] - pub publicKey: alloy::sol_types::private::Bytes, - #[allow(missing_docs)] - pub signature: alloy::sol_types::private::Bytes, - #[allow(missing_docs)] - pub extraData: alloy::sol_types::private::Bytes, - } - ///Container type for the return parameters of the [`delegatedUserDecryptionRequest((bytes32,address)[],(uint256,uint256),(address,address),(uint256,address[]),bytes,bytes,bytes)`](delegatedUserDecryptionRequestCall) function. - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct delegatedUserDecryptionRequestReturn {} - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Array, - RequestValidity, - DelegationAccounts, - ContractsInfo, - alloy::sol_types::sol_data::Bytes, - alloy::sol_types::sol_data::Bytes, - alloy::sol_types::sol_data::Bytes, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Vec< - ::RustType, - >, - ::RustType, - ::RustType, - ::RustType, - alloy::sol_types::private::Bytes, - alloy::sol_types::private::Bytes, - alloy::sol_types::private::Bytes, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: delegatedUserDecryptionRequestCall) -> Self { - ( - value.ctHandleContractPairs, - value.requestValidity, - value.delegationAccounts, - value.contractsInfo, - value.publicKey, - value.signature, - value.extraData, - ) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for delegatedUserDecryptionRequestCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - ctHandleContractPairs: tuple.0, - requestValidity: tuple.1, - delegationAccounts: tuple.2, - contractsInfo: tuple.3, - publicKey: tuple.4, - signature: tuple.5, - extraData: tuple.6, - } - } - } - } - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: delegatedUserDecryptionRequestReturn) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for delegatedUserDecryptionRequestReturn { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} - } - } - } - impl delegatedUserDecryptionRequestReturn { - fn _tokenize( - &self, - ) -> ::ReturnToken< - '_, - > { - () - } - } - #[automatically_derived] - impl alloy_sol_types::SolCall for delegatedUserDecryptionRequestCall { - type Parameters<'a> = ( - alloy::sol_types::sol_data::Array, - RequestValidity, - DelegationAccounts, - ContractsInfo, - alloy::sol_types::sol_data::Bytes, - alloy::sol_types::sol_data::Bytes, - alloy::sol_types::sol_data::Bytes, - ); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = delegatedUserDecryptionRequestReturn; - type ReturnTuple<'a> = (); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "delegatedUserDecryptionRequest((bytes32,address)[],(uint256,uint256),(address,address),(uint256,address[]),bytes,bytes,bytes)"; - const SELECTOR: [u8; 4] = [159u8, 173u8, 90u8, 47u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize( - &self.ctHandleContractPairs, - ), - ::tokenize( - &self.requestValidity, - ), - ::tokenize( - &self.delegationAccounts, - ), - ::tokenize( - &self.contractsInfo, - ), - ::tokenize( - &self.publicKey, - ), - ::tokenize( - &self.signature, - ), - ::tokenize( - &self.extraData, - ), - ) - } - #[inline] - fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - delegatedUserDecryptionRequestReturn::_tokenize(ret) - } - #[inline] - fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(Into::into) - } - #[inline] - fn abi_decode_returns_validate( - data: &[u8], - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Into::into) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `getDecryptionConsensusTxSenders(uint256)` and selector `0x0900cc69`. ```solidity function getDecryptionConsensusTxSenders(uint256 decryptionId) external view returns (address[] memory); @@ -4562,155 +3843,8 @@ function getDecryptionConsensusTxSenders(uint256 decryptionId) external view ret type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getDecryptionConsensusTxSenders(uint256)"; - const SELECTOR: [u8; 4] = [9u8, 0u8, 204u8, 105u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.decryptionId), - ) - } - #[inline] - fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - ( - as alloy_sol_types::SolType>::tokenize(ret), - ) - } - #[inline] - fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: getDecryptionConsensusTxSendersReturn = r.into(); - r._0 - }) - } - #[inline] - fn abi_decode_returns_validate( - data: &[u8], - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: getDecryptionConsensusTxSendersReturn = r.into(); - r._0 - }) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `getVersion()` and selector `0x0d8e6e2c`. -```solidity -function getVersion() external pure returns (string memory); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct getVersionCall; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`getVersion()`](getVersionCall) function. - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct getVersionReturn { - #[allow(missing_docs)] - pub _0: alloy::sol_types::private::String, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getVersionCall) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for getVersionCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self - } - } - } - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getVersionReturn) -> Self { - (value._0,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for getVersionReturn { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolCall for getVersionCall { - type Parameters<'a> = (); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::String; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getVersion()"; - const SELECTOR: [u8; 4] = [13u8, 142u8, 110u8, 44u8]; + const SIGNATURE: &'static str = "getDecryptionConsensusTxSenders(uint256)"; + const SELECTOR: [u8; 4] = [9u8, 0u8, 204u8, 105u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -4719,14 +3853,18 @@ function getVersion() external pure returns (string memory); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - () + ( + as alloy_sol_types::SolType>::tokenize(&self.decryptionId), + ) } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - ::tokenize( - ret, - ), + as alloy_sol_types::SolType>::tokenize(ret), ) } #[inline] @@ -4735,7 +3873,7 @@ function getVersion() external pure returns (string memory); '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: getVersionReturn = r.into(); + let r: getDecryptionConsensusTxSendersReturn = r.into(); r._0 }) } @@ -4747,7 +3885,7 @@ function getVersion() external pure returns (string memory); '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: getVersionReturn = r.into(); + let r: getDecryptionConsensusTxSendersReturn = r.into(); r._0 }) } @@ -4755,24 +3893,21 @@ function getVersion() external pure returns (string memory); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `isDecryptionDone(uint256)` and selector `0x58f5b8ab`. + /**Function with signature `getVersion()` and selector `0x0d8e6e2c`. ```solidity -function isDecryptionDone(uint256 decryptionId) external view returns (bool); +function getVersion() external pure returns (string memory); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct isDecryptionDoneCall { - #[allow(missing_docs)] - pub decryptionId: alloy::sol_types::private::primitives::aliases::U256, - } + pub struct getVersionCall; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`isDecryptionDone(uint256)`](isDecryptionDoneCall) function. + ///Container type for the return parameters of the [`getVersion()`](getVersionCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct isDecryptionDoneReturn { + pub struct getVersionReturn { #[allow(missing_docs)] - pub _0: bool, + pub _0: alloy::sol_types::private::String, } #[allow( non_camel_case_types, @@ -4784,11 +3919,9 @@ function isDecryptionDone(uint256 decryptionId) external view returns (bool); use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -4802,26 +3935,24 @@ function isDecryptionDone(uint256 decryptionId) external view returns (bool); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: isDecryptionDoneCall) -> Self { - (value.decryptionId,) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getVersionCall) -> Self { + () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for isDecryptionDoneCall { + impl ::core::convert::From> for getVersionCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { decryptionId: tuple.0 } + Self } } } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (bool,); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -4835,34 +3966,32 @@ function isDecryptionDone(uint256 decryptionId) external view returns (bool); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: isDecryptionDoneReturn) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getVersionReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for isDecryptionDoneReturn { + impl ::core::convert::From> for getVersionReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for isDecryptionDoneCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + impl alloy_sol_types::SolCall for getVersionCall { + type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = bool; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type Return = alloy::sol_types::private::String; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "isDecryptionDone(uint256)"; - const SELECTOR: [u8; 4] = [88u8, 245u8, 184u8, 171u8]; + const SIGNATURE: &'static str = "getVersion()"; + const SELECTOR: [u8; 4] = [13u8, 142u8, 110u8, 44u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -4871,16 +4000,12 @@ function isDecryptionDone(uint256 decryptionId) external view returns (bool); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.decryptionId), - ) + () } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - ::tokenize( + ::tokenize( ret, ), ) @@ -4891,7 +4016,7 @@ function isDecryptionDone(uint256 decryptionId) external view returns (bool); '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: isDecryptionDoneReturn = r.into(); + let r: getVersionReturn = r.into(); r._0 }) } @@ -4903,7 +4028,7 @@ function isDecryptionDone(uint256 decryptionId) external view returns (bool); '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: isDecryptionDoneReturn = r.into(); + let r: getVersionReturn = r.into(); r._0 }) } @@ -4911,34 +4036,22 @@ function isDecryptionDone(uint256 decryptionId) external view returns (bool); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `isDelegatedUserDecryptionReady(uint256,(address,address),(bytes32,address)[],address[],bytes)` and selector `0xb6e9a9b3`. + /**Function with signature `isDecryptionDone(uint256)` and selector `0x58f5b8ab`. ```solidity -function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAccounts memory delegationAccounts, CtHandleContractPair[] memory ctHandleContractPairs, address[] memory contractAddresses, bytes memory extraData) external view returns (bool); +function isDecryptionDone(uint256 decryptionId) external view returns (bool); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct isDelegatedUserDecryptionReadyCall { - #[allow(missing_docs)] - pub contractsChainId: alloy::sol_types::private::primitives::aliases::U256, - #[allow(missing_docs)] - pub delegationAccounts: ::RustType, - #[allow(missing_docs)] - pub ctHandleContractPairs: alloy::sol_types::private::Vec< - ::RustType, - >, - #[allow(missing_docs)] - pub contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, + pub struct isDecryptionDoneCall { #[allow(missing_docs)] - pub extraData: alloy::sol_types::private::Bytes, + pub decryptionId: alloy::sol_types::private::primitives::aliases::U256, } #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`isDelegatedUserDecryptionReady(uint256,(address,address),(bytes32,address)[],address[],bytes)`](isDelegatedUserDecryptionReadyCall) function. + ///Container type for the return parameters of the [`isDecryptionDone(uint256)`](isDecryptionDoneCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct isDelegatedUserDecryptionReadyReturn { + pub struct isDecryptionDoneReturn { #[allow(missing_docs)] pub _0: bool, } @@ -4952,22 +4065,10 @@ function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAcco use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, - alloy::sol_types::sol_data::Array, - alloy::sol_types::sol_data::Bytes, - ); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( alloy::sol_types::private::primitives::aliases::U256, - ::RustType, - alloy::sol_types::private::Vec< - ::RustType, - >, - alloy::sol_types::private::Vec, - alloy::sol_types::private::Bytes, ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] @@ -4982,30 +4083,18 @@ function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAcco } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: isDelegatedUserDecryptionReadyCall) -> Self { - ( - value.contractsChainId, - value.delegationAccounts, - value.ctHandleContractPairs, - value.contractAddresses, - value.extraData, - ) + fn from(value: isDecryptionDoneCall) -> Self { + (value.decryptionId,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for isDelegatedUserDecryptionReadyCall { + for isDecryptionDoneCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - contractsChainId: tuple.0, - delegationAccounts: tuple.1, - ctHandleContractPairs: tuple.2, - contractAddresses: tuple.3, - extraData: tuple.4, - } + Self { decryptionId: tuple.0 } } } } @@ -5027,30 +4116,24 @@ function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAcco } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: isDelegatedUserDecryptionReadyReturn) -> Self { + fn from(value: isDecryptionDoneReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for isDelegatedUserDecryptionReadyReturn { + for isDecryptionDoneReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for isDelegatedUserDecryptionReadyCall { - type Parameters<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, - alloy::sol_types::sol_data::Array, - alloy::sol_types::sol_data::Bytes, - ); + impl alloy_sol_types::SolCall for isDecryptionDoneCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; @@ -5059,8 +4142,8 @@ function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAcco type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "isDelegatedUserDecryptionReady(uint256,(address,address),(bytes32,address)[],address[],bytes)"; - const SELECTOR: [u8; 4] = [182u8, 233u8, 169u8, 179u8]; + const SIGNATURE: &'static str = "isDecryptionDone(uint256)"; + const SELECTOR: [u8; 4] = [88u8, 245u8, 184u8, 171u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -5072,21 +4155,7 @@ function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAcco ( as alloy_sol_types::SolType>::tokenize(&self.contractsChainId), - ::tokenize( - &self.delegationAccounts, - ), - as alloy_sol_types::SolType>::tokenize( - &self.ctHandleContractPairs, - ), - as alloy_sol_types::SolType>::tokenize(&self.contractAddresses), - ::tokenize( - &self.extraData, - ), + > as alloy_sol_types::SolType>::tokenize(&self.decryptionId), ) } #[inline] @@ -5103,7 +4172,7 @@ function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAcco '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: isDelegatedUserDecryptionReadyReturn = r.into(); + let r: isDecryptionDoneReturn = r.into(); r._0 }) } @@ -5115,7 +4184,7 @@ function isDelegatedUserDecryptionReady(uint256 contractsChainId, DelegationAcco '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: isDelegatedUserDecryptionReadyReturn = r.into(); + let r: isDecryptionDoneReturn = r.into(); r._0 }) } @@ -6263,8 +5332,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted #[derive(serde::Serialize, serde::Deserialize)] #[derive()] pub enum IDecryptionCalls { - #[allow(missing_docs)] - delegatedUserDecryptionRequest(delegatedUserDecryptionRequestCall), #[allow(missing_docs)] getDecryptionConsensusTxSenders(getDecryptionConsensusTxSendersCall), #[allow(missing_docs)] @@ -6272,8 +5339,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted #[allow(missing_docs)] isDecryptionDone(isDecryptionDoneCall), #[allow(missing_docs)] - isDelegatedUserDecryptionReady(isDelegatedUserDecryptionReadyCall), - #[allow(missing_docs)] isPublicDecryptionReady(isPublicDecryptionReadyCall), #[allow(missing_docs)] isUserDecryptionReady(isUserDecryptionReadyCall), @@ -6301,8 +5366,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted [64u8, 20u8, 196u8, 205u8], [88u8, 245u8, 184u8, 171u8], [111u8, 137u8, 19u8, 188u8], - [159u8, 173u8, 90u8, 47u8], - [182u8, 233u8, 169u8, 179u8], [216u8, 153u8, 143u8, 69u8], [241u8, 181u8, 122u8, 219u8], [251u8, 184u8, 50u8, 89u8], @@ -6312,13 +5375,10 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted impl alloy_sol_types::SolInterface for IDecryptionCalls { const NAME: &'static str = "IDecryptionCalls"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 11usize; + const COUNT: usize = 9usize; #[inline] fn selector(&self) -> [u8; 4] { match self { - Self::delegatedUserDecryptionRequest(_) => { - ::SELECTOR - } Self::getDecryptionConsensusTxSenders(_) => { ::SELECTOR } @@ -6328,9 +5388,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted Self::isDecryptionDone(_) => { ::SELECTOR } - Self::isDelegatedUserDecryptionReady(_) => { - ::SELECTOR - } Self::isPublicDecryptionReady(_) => { ::SELECTOR } @@ -6434,28 +5491,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted } publicDecryptionResponse }, - { - fn delegatedUserDecryptionRequest( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(IDecryptionCalls::delegatedUserDecryptionRequest) - } - delegatedUserDecryptionRequest - }, - { - fn isDelegatedUserDecryptionReady( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(IDecryptionCalls::isDelegatedUserDecryptionReady) - } - isDelegatedUserDecryptionReady - }, { fn publicDecryptionRequest( data: &[u8], @@ -6575,28 +5610,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted } publicDecryptionResponse }, - { - fn delegatedUserDecryptionRequest( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(IDecryptionCalls::delegatedUserDecryptionRequest) - } - delegatedUserDecryptionRequest - }, - { - fn isDelegatedUserDecryptionReady( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(IDecryptionCalls::isDelegatedUserDecryptionReady) - } - isDelegatedUserDecryptionReady - }, { fn publicDecryptionRequest( data: &[u8], @@ -6644,11 +5657,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted #[inline] fn abi_encoded_size(&self) -> usize { match self { - Self::delegatedUserDecryptionRequest(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::getDecryptionConsensusTxSenders(inner) => { ::abi_encoded_size( inner, @@ -6662,11 +5670,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted inner, ) } - Self::isDelegatedUserDecryptionReady(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::isPublicDecryptionReady(inner) => { ::abi_encoded_size( inner, @@ -6702,12 +5705,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted #[inline] fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { match self { - Self::delegatedUserDecryptionRequest(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::getDecryptionConsensusTxSenders(inner) => { ::abi_encode_raw( inner, @@ -6726,12 +5723,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted out, ) } - Self::isDelegatedUserDecryptionReady(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::isPublicDecryptionReady(inner) => { ::abi_encode_raw( inner, @@ -6782,8 +5773,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted #[allow(missing_docs)] DecryptionNotRequested(DecryptionNotRequested), #[allow(missing_docs)] - DelegatorAddressInContractAddresses(DelegatorAddressInContractAddresses), - #[allow(missing_docs)] DifferentKeyIdsNotAllowed(DifferentKeyIdsNotAllowed), #[allow(missing_docs)] EmptyContractAddresses(EmptyContractAddresses), @@ -6826,7 +5815,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted [164u8, 195u8, 3u8, 145u8], [166u8, 166u8, 203u8, 33u8], [175u8, 31u8, 4u8, 149u8], - [195u8, 68u8, 106u8, 199u8], [207u8, 174u8, 146u8, 31u8], [212u8, 138u8, 249u8, 66u8], [220u8, 77u8, 120u8, 177u8], @@ -6839,7 +5827,7 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted impl alloy_sol_types::SolInterface for IDecryptionErrors { const NAME: &'static str = "IDecryptionErrors"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 16usize; + const COUNT: usize = 15usize; #[inline] fn selector(&self) -> [u8; 4] { match self { @@ -6852,9 +5840,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted Self::DecryptionNotRequested(_) => { ::SELECTOR } - Self::DelegatorAddressInContractAddresses(_) => { - ::SELECTOR - } Self::DifferentKeyIdsNotAllowed(_) => { ::SELECTOR } @@ -7009,17 +5994,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted } ContractAddressesMaxLengthExceeded }, - { - fn DelegatorAddressInContractAddresses( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(IDecryptionErrors::DelegatorAddressInContractAddresses) - } - DelegatorAddressInContractAddresses - }, { fn DifferentKeyIdsNotAllowed( data: &[u8], @@ -7205,17 +6179,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted } ContractAddressesMaxLengthExceeded }, - { - fn DelegatorAddressInContractAddresses( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(IDecryptionErrors::DelegatorAddressInContractAddresses) - } - DelegatorAddressInContractAddresses - }, { fn DifferentKeyIdsNotAllowed( data: &[u8], @@ -7311,11 +6274,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted inner, ) } - Self::DelegatorAddressInContractAddresses(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::DifferentKeyIdsNotAllowed(inner) => { ::abi_encoded_size( inner, @@ -7399,12 +6357,6 @@ function userDecryptionResponse(uint256 decryptionId, bytes memory userDecrypted out, ) } - Self::DelegatorAddressInContractAddresses(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::DifferentKeyIdsNotAllowed(inner) => { ::abi_encode_raw( inner, @@ -7799,31 +6751,6 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder<&P, C, N> { alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) } - ///Creates a new call builder for the [`delegatedUserDecryptionRequest`] function. - pub fn delegatedUserDecryptionRequest( - &self, - ctHandleContractPairs: alloy::sol_types::private::Vec< - ::RustType, - >, - requestValidity: ::RustType, - delegationAccounts: ::RustType, - contractsInfo: ::RustType, - publicKey: alloy::sol_types::private::Bytes, - signature: alloy::sol_types::private::Bytes, - extraData: alloy::sol_types::private::Bytes, - ) -> alloy_contract::SolCallBuilder<&P, delegatedUserDecryptionRequestCall, N> { - self.call_builder( - &delegatedUserDecryptionRequestCall { - ctHandleContractPairs, - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - signature, - extraData, - }, - ) - } ///Creates a new call builder for the [`getDecryptionConsensusTxSenders`] function. pub fn getDecryptionConsensusTxSenders( &self, @@ -7852,29 +6779,6 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ }, ) } - ///Creates a new call builder for the [`isDelegatedUserDecryptionReady`] function. - pub fn isDelegatedUserDecryptionReady( - &self, - contractsChainId: alloy::sol_types::private::primitives::aliases::U256, - delegationAccounts: ::RustType, - ctHandleContractPairs: alloy::sol_types::private::Vec< - ::RustType, - >, - contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - extraData: alloy::sol_types::private::Bytes, - ) -> alloy_contract::SolCallBuilder<&P, isDelegatedUserDecryptionReadyCall, N> { - self.call_builder( - &isDelegatedUserDecryptionReadyCall { - contractsChainId, - delegationAccounts, - ctHandleContractPairs, - contractAddresses, - extraData, - }, - ) - } ///Creates a new call builder for the [`isPublicDecryptionReady`] function. pub fn isPublicDecryptionReady( &self, diff --git a/gateway-contracts/rust_bindings/src/i_multichain_acl.rs b/gateway-contracts/rust_bindings/src/i_multichain_acl.rs index 6daf81e12..9a4c0f38f 100644 --- a/gateway-contracts/rust_bindings/src/i_multichain_acl.rs +++ b/gateway-contracts/rust_bindings/src/i_multichain_acl.rs @@ -3,30 +3,20 @@ Generated by the following Solidity interface... ```solidity interface IMultichainACL { - struct DelegationAccounts { - address delegatorAddress; - address delegatedAddress; - } - error ContractsMaxLengthExceeded(uint256 maxLength, uint256 actualLength); error CoprocessorAlreadyAllowedAccount(bytes32 ctHandle, address account, address txSender); error CoprocessorAlreadyAllowedPublicDecrypt(bytes32 ctHandle, address txSender); - error CoprocessorAlreadyDelegated(uint256 chainId, DelegationAccounts delegationAccounts, address[] contractAddresses, address txSender); error EmptyContractAddresses(); event AllowAccount(bytes32 indexed ctHandle, address accountAddress); event AllowPublicDecrypt(bytes32 indexed ctHandle); - event DelegateAccount(uint256 indexed chainId, DelegationAccounts delegationAccounts, address[] contractAddresses); function allowAccount(bytes32 ctHandle, address accountAddress, bytes memory extraData) external; function allowPublicDecrypt(bytes32 ctHandle, bytes memory extraData) external; - function delegateAccount(uint256 chainId, DelegationAccounts memory delegationAccounts, address[] memory contractAddresses) external; function getAllowAccountConsensusTxSenders(bytes32 ctHandle, address accountAddress) external view returns (address[] memory); function getAllowPublicDecryptConsensusTxSenders(bytes32 ctHandle) external view returns (address[] memory); - function getDelegateAccountConsensusTxSenders(uint256 chainId, DelegationAccounts memory delegationAccounts, address[] memory contractAddresses) external view returns (address[] memory); function getVersion() external pure returns (string memory); function isAccountAllowed(bytes32 ctHandle, address accountAddress) external view returns (bool); - function isAccountDelegated(uint256 chainId, DelegationAccounts memory delegationAccounts, address[] memory contractAddresses) external view returns (bool); function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); } ``` @@ -75,41 +65,6 @@ interface IMultichainACL { "outputs": [], "stateMutability": "nonpayable" }, - { - "type": "function", - "name": "delegateAccount", - "inputs": [ - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "delegationAccounts", - "type": "tuple", - "internalType": "struct DelegationAccounts", - "components": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegatedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "contractAddresses", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, { "type": "function", "name": "getAllowAccountConsensusTxSenders", @@ -153,47 +108,6 @@ interface IMultichainACL { ], "stateMutability": "view" }, - { - "type": "function", - "name": "getDelegateAccountConsensusTxSenders", - "inputs": [ - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "delegationAccounts", - "type": "tuple", - "internalType": "struct DelegationAccounts", - "components": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegatedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "contractAddresses", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [ - { - "name": "", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, { "type": "function", "name": "getVersion", @@ -231,47 +145,6 @@ interface IMultichainACL { ], "stateMutability": "view" }, - { - "type": "function", - "name": "isAccountDelegated", - "inputs": [ - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "delegationAccounts", - "type": "tuple", - "internalType": "struct DelegationAccounts", - "components": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegatedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "contractAddresses", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, { "type": "function", "name": "isPublicDecryptAllowed", @@ -323,43 +196,6 @@ interface IMultichainACL { ], "anonymous": false }, - { - "type": "event", - "name": "DelegateAccount", - "inputs": [ - { - "name": "chainId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "delegationAccounts", - "type": "tuple", - "indexed": false, - "internalType": "struct DelegationAccounts", - "components": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegatedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "contractAddresses", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - } - ], - "anonymous": false - }, { "type": "error", "name": "ContractsMaxLengthExceeded", @@ -413,44 +249,6 @@ interface IMultichainACL { } ] }, - { - "type": "error", - "name": "CoprocessorAlreadyDelegated", - "inputs": [ - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "delegationAccounts", - "type": "tuple", - "internalType": "struct DelegationAccounts", - "components": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegatedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "contractAddresses", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "txSender", - "type": "address", - "internalType": "address" - } - ] - }, { "type": "error", "name": "EmptyContractAddresses", @@ -490,226 +288,6 @@ pub mod IMultichainACL { ); #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**```solidity -struct DelegationAccounts { address delegatorAddress; address delegatedAddress; } -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct DelegationAccounts { - #[allow(missing_docs)] - pub delegatorAddress: alloy::sol_types::private::Address, - #[allow(missing_docs)] - pub delegatedAddress: alloy::sol_types::private::Address, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Address, - alloy::sol_types::sol_data::Address, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Address, - alloy::sol_types::private::Address, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: DelegationAccounts) -> Self { - (value.delegatorAddress, value.delegatedAddress) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for DelegationAccounts { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - delegatorAddress: tuple.0, - delegatedAddress: tuple.1, - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolValue for DelegationAccounts { - type SolType = Self; - } - #[automatically_derived] - impl alloy_sol_types::private::SolTypeValue for DelegationAccounts { - #[inline] - fn stv_to_tokens(&self) -> ::Token<'_> { - ( - ::tokenize( - &self.delegatorAddress, - ), - ::tokenize( - &self.delegatedAddress, - ), - ) - } - #[inline] - fn stv_abi_encoded_size(&self) -> usize { - if let Some(size) = ::ENCODED_SIZE { - return size; - } - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_encoded_size(&tuple) - } - #[inline] - fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { - ::eip712_hash_struct(self) - } - #[inline] - fn stv_abi_encode_packed_to( - &self, - out: &mut alloy_sol_types::private::Vec, - ) { - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out) - } - #[inline] - fn stv_abi_packed_encoded_size(&self) -> usize { - if let Some(size) = ::PACKED_ENCODED_SIZE { - return size; - } - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple) - } - } - #[automatically_derived] - impl alloy_sol_types::SolType for DelegationAccounts { - type RustType = Self; - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SOL_NAME: &'static str = ::NAME; - const ENCODED_SIZE: Option = as alloy_sol_types::SolType>::ENCODED_SIZE; - const PACKED_ENCODED_SIZE: Option = as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; - #[inline] - fn valid_token(token: &Self::Token<'_>) -> bool { - as alloy_sol_types::SolType>::valid_token(token) - } - #[inline] - fn detokenize(token: Self::Token<'_>) -> Self::RustType { - let tuple = as alloy_sol_types::SolType>::detokenize(token); - >>::from(tuple) - } - } - #[automatically_derived] - impl alloy_sol_types::SolStruct for DelegationAccounts { - const NAME: &'static str = "DelegationAccounts"; - #[inline] - fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { - alloy_sol_types::private::Cow::Borrowed( - "DelegationAccounts(address delegatorAddress,address delegatedAddress)", - ) - } - #[inline] - fn eip712_components() -> alloy_sol_types::private::Vec< - alloy_sol_types::private::Cow<'static, str>, - > { - alloy_sol_types::private::Vec::new() - } - #[inline] - fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { - ::eip712_root_type() - } - #[inline] - fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { - [ - ::eip712_data_word( - &self.delegatorAddress, - ) - .0, - ::eip712_data_word( - &self.delegatedAddress, - ) - .0, - ] - .concat() - } - } - #[automatically_derived] - impl alloy_sol_types::EventTopic for DelegationAccounts { - #[inline] - fn topic_preimage_length(rust: &Self::RustType) -> usize { - 0usize - + ::topic_preimage_length( - &rust.delegatorAddress, - ) - + ::topic_preimage_length( - &rust.delegatedAddress, - ) - } - #[inline] - fn encode_topic_preimage( - rust: &Self::RustType, - out: &mut alloy_sol_types::private::Vec, - ) { - out.reserve( - ::topic_preimage_length(rust), - ); - ::encode_topic_preimage( - &rust.delegatorAddress, - out, - ); - ::encode_topic_preimage( - &rust.delegatedAddress, - out, - ); - } - #[inline] - fn encode_topic( - rust: &Self::RustType, - ) -> alloy_sol_types::abi::token::WordToken { - let mut out = alloy_sol_types::private::Vec::new(); - ::encode_topic_preimage( - rust, - &mut out, - ); - alloy_sol_types::abi::token::WordToken( - alloy_sol_types::private::keccak256(out), - ) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Custom error with signature `ContractsMaxLengthExceeded(uint256,uint256)` and selector `0xa7db2751`. ```solidity error ContractsMaxLengthExceeded(uint256 maxLength, uint256 actualLength); @@ -1006,24 +584,13 @@ error CoprocessorAlreadyAllowedPublicDecrypt(bytes32 ctHandle, address txSender) }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `CoprocessorAlreadyDelegated(uint256,(address,address),address[],address)` and selector `0x0cc695ad`. + /**Custom error with signature `EmptyContractAddresses()` and selector `0x57cfa217`. ```solidity -error CoprocessorAlreadyDelegated(uint256 chainId, DelegationAccounts delegationAccounts, address[] contractAddresses, address txSender); +error EmptyContractAddresses(); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct CoprocessorAlreadyDelegated { - #[allow(missing_docs)] - pub chainId: alloy::sol_types::private::primitives::aliases::U256, - #[allow(missing_docs)] - pub delegationAccounts: ::RustType, - #[allow(missing_docs)] - pub contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - #[allow(missing_docs)] - pub txSender: alloy::sol_types::private::Address, - } + pub struct EmptyContractAddresses; #[allow( non_camel_case_types, non_snake_case, @@ -1033,19 +600,9 @@ error CoprocessorAlreadyDelegated(uint256 chainId, DelegationAccounts delegation const _: () = { use alloy::sol_types as alloy_sol_types; #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, - alloy::sol_types::sol_data::Address, - ); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ::RustType, - alloy::sol_types::private::Vec, - alloy::sol_types::private::Address, - ); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -1059,124 +616,26 @@ error CoprocessorAlreadyDelegated(uint256 chainId, DelegationAccounts delegation } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: CoprocessorAlreadyDelegated) -> Self { - ( - value.chainId, - value.delegationAccounts, - value.contractAddresses, - value.txSender, - ) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: EmptyContractAddresses) -> Self { + () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for CoprocessorAlreadyDelegated { + impl ::core::convert::From> for EmptyContractAddresses { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - chainId: tuple.0, - delegationAccounts: tuple.1, - contractAddresses: tuple.2, - txSender: tuple.3, - } + Self } } #[automatically_derived] - impl alloy_sol_types::SolError for CoprocessorAlreadyDelegated { + impl alloy_sol_types::SolError for EmptyContractAddresses { type Parameters<'a> = UnderlyingSolTuple<'a>; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "CoprocessorAlreadyDelegated(uint256,(address,address),address[],address)"; - const SELECTOR: [u8; 4] = [12u8, 198u8, 149u8, 173u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.chainId), - ::tokenize( - &self.delegationAccounts, - ), - as alloy_sol_types::SolType>::tokenize(&self.contractAddresses), - ::tokenize( - &self.txSender, - ), - ) - } - #[inline] - fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Self::new) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `EmptyContractAddresses()` and selector `0x57cfa217`. -```solidity -error EmptyContractAddresses(); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct EmptyContractAddresses; - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: EmptyContractAddresses) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for EmptyContractAddresses { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self - } - } - #[automatically_derived] - impl alloy_sol_types::SolError for EmptyContractAddresses { - type Parameters<'a> = UnderlyingSolTuple<'a>; - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "EmptyContractAddresses()"; - const SELECTOR: [u8; 4] = [87u8, 207u8, 162u8, 23u8]; + const SIGNATURE: &'static str = "EmptyContractAddresses()"; + const SELECTOR: [u8; 4] = [87u8, 207u8, 162u8, 23u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -1421,133 +880,6 @@ event AllowPublicDecrypt(bytes32 indexed ctHandle); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Event with signature `DelegateAccount(uint256,(address,address),address[])` and selector `0x06c13155cfa90343cb4fba180ce8d383b4f56a5bc7aac0e5d8f194b64672a51e`. -```solidity -event DelegateAccount(uint256 indexed chainId, DelegationAccounts delegationAccounts, address[] contractAddresses); -```*/ - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - #[derive(Clone)] - pub struct DelegateAccount { - #[allow(missing_docs)] - pub chainId: alloy::sol_types::private::primitives::aliases::U256, - #[allow(missing_docs)] - pub delegationAccounts: ::RustType, - #[allow(missing_docs)] - pub contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[automatically_derived] - impl alloy_sol_types::SolEvent for DelegateAccount { - type DataTuple<'a> = ( - DelegationAccounts, - alloy::sol_types::sol_data::Array, - ); - type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - type TopicList = ( - alloy_sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Uint<256>, - ); - const SIGNATURE: &'static str = "DelegateAccount(uint256,(address,address),address[])"; - const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ - 6u8, 193u8, 49u8, 85u8, 207u8, 169u8, 3u8, 67u8, 203u8, 79u8, 186u8, - 24u8, 12u8, 232u8, 211u8, 131u8, 180u8, 245u8, 106u8, 91u8, 199u8, 170u8, - 192u8, 229u8, 216u8, 241u8, 148u8, 182u8, 70u8, 114u8, 165u8, 30u8, - ]); - const ANONYMOUS: bool = false; - #[allow(unused_variables)] - #[inline] - fn new( - topics: ::RustType, - data: as alloy_sol_types::SolType>::RustType, - ) -> Self { - Self { - chainId: topics.1, - delegationAccounts: data.0, - contractAddresses: data.1, - } - } - #[inline] - fn check_signature( - topics: &::RustType, - ) -> alloy_sol_types::Result<()> { - if topics.0 != Self::SIGNATURE_HASH { - return Err( - alloy_sol_types::Error::invalid_event_signature_hash( - Self::SIGNATURE, - topics.0, - Self::SIGNATURE_HASH, - ), - ); - } - Ok(()) - } - #[inline] - fn tokenize_body(&self) -> Self::DataToken<'_> { - ( - ::tokenize( - &self.delegationAccounts, - ), - as alloy_sol_types::SolType>::tokenize(&self.contractAddresses), - ) - } - #[inline] - fn topics(&self) -> ::RustType { - (Self::SIGNATURE_HASH.into(), self.chainId.clone()) - } - #[inline] - fn encode_topics_raw( - &self, - out: &mut [alloy_sol_types::abi::token::WordToken], - ) -> alloy_sol_types::Result<()> { - if out.len() < ::COUNT { - return Err(alloy_sol_types::Error::Overrun); - } - out[0usize] = alloy_sol_types::abi::token::WordToken( - Self::SIGNATURE_HASH, - ); - out[1usize] = as alloy_sol_types::EventTopic>::encode_topic(&self.chainId); - Ok(()) - } - } - #[automatically_derived] - impl alloy_sol_types::private::IntoLogData for DelegateAccount { - fn to_log_data(&self) -> alloy_sol_types::private::LogData { - From::from(self) - } - fn into_log_data(self) -> alloy_sol_types::private::LogData { - From::from(&self) - } - } - #[automatically_derived] - impl From<&DelegateAccount> for alloy_sol_types::private::LogData { - #[inline] - fn from(this: &DelegateAccount) -> alloy_sol_types::private::LogData { - alloy_sol_types::SolEvent::encode_log_data(this) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `allowAccount(bytes32,address,bytes)` and selector `0x294a8705`. ```solidity function allowAccount(bytes32 ctHandle, address accountAddress, bytes memory extraData) external; @@ -1879,26 +1211,27 @@ function allowPublicDecrypt(bytes32 ctHandle, bytes memory extraData) external; }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `delegateAccount(uint256,(address,address),address[])` and selector `0xf4c5f493`. + /**Function with signature `getAllowAccountConsensusTxSenders(bytes32,address)` and selector `0xae953186`. ```solidity -function delegateAccount(uint256 chainId, DelegationAccounts memory delegationAccounts, address[] memory contractAddresses) external; +function getAllowAccountConsensusTxSenders(bytes32 ctHandle, address accountAddress) external view returns (address[] memory); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct delegateAccountCall { - #[allow(missing_docs)] - pub chainId: alloy::sol_types::private::primitives::aliases::U256, + pub struct getAllowAccountConsensusTxSendersCall { #[allow(missing_docs)] - pub delegationAccounts: ::RustType, + pub ctHandle: alloy::sol_types::private::FixedBytes<32>, #[allow(missing_docs)] - pub contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, + pub accountAddress: alloy::sol_types::private::Address, } - ///Container type for the return parameters of the [`delegateAccount(uint256,(address,address),address[])`](delegateAccountCall) function. + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getAllowAccountConsensusTxSenders(bytes32,address)`](getAllowAccountConsensusTxSendersCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct delegateAccountReturn {} + pub struct getAllowAccountConsensusTxSendersReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Vec, + } #[allow( non_camel_case_types, non_snake_case, @@ -1910,15 +1243,13 @@ function delegateAccount(uint256 chainId, DelegationAccounts memory delegationAc { #[doc(hidden)] type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, + alloy::sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, ); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ::RustType, - alloy::sol_types::private::Vec, + alloy::sol_types::private::FixedBytes<32>, + alloy::sol_types::private::Address, ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] @@ -1933,28 +1264,33 @@ function delegateAccount(uint256 chainId, DelegationAccounts memory delegationAc } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: delegateAccountCall) -> Self { - (value.chainId, value.delegationAccounts, value.contractAddresses) + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getAllowAccountConsensusTxSendersCall) -> Self { + (value.ctHandle, value.accountAddress) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for delegateAccountCall { + impl ::core::convert::From> + for getAllowAccountConsensusTxSendersCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { - chainId: tuple.0, - delegationAccounts: tuple.1, - contractAddresses: tuple.2, + ctHandle: tuple.0, + accountAddress: tuple.1, } } } } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Array, + ); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Vec, + ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -1968,45 +1304,41 @@ function delegateAccount(uint256 chainId, DelegationAccounts memory delegationAc } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: delegateAccountReturn) -> Self { - () + fn from(value: getAllowAccountConsensusTxSendersReturn) -> Self { + (value._0,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for delegateAccountReturn { + for getAllowAccountConsensusTxSendersReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} + Self { _0: tuple.0 } } } } - impl delegateAccountReturn { - fn _tokenize( - &self, - ) -> ::ReturnToken<'_> { - () - } - } #[automatically_derived] - impl alloy_sol_types::SolCall for delegateAccountCall { + impl alloy_sol_types::SolCall for getAllowAccountConsensusTxSendersCall { type Parameters<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, + alloy::sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, ); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = delegateAccountReturn; - type ReturnTuple<'a> = (); + type Return = alloy::sol_types::private::Vec< + alloy::sol_types::private::Address, + >; + type ReturnTuple<'a> = ( + alloy::sol_types::sol_data::Array, + ); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "delegateAccount(uint256,(address,address),address[])"; - const SELECTOR: [u8; 4] = [244u8, 197u8, 244u8, 147u8]; + const SIGNATURE: &'static str = "getAllowAccountConsensusTxSenders(bytes32,address)"; + const SELECTOR: [u8; 4] = [174u8, 149u8, 49u8, 134u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -2016,193 +1348,21 @@ function delegateAccount(uint256 chainId, DelegationAccounts memory delegationAc #[inline] fn tokenize(&self) -> Self::Token<'_> { ( - as alloy_sol_types::SolType>::tokenize(&self.chainId), - ::tokenize( - &self.delegationAccounts, + as alloy_sol_types::SolType>::tokenize(&self.ctHandle), + ::tokenize( + &self.accountAddress, ), - as alloy_sol_types::SolType>::tokenize(&self.contractAddresses), ) } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - delegateAccountReturn::_tokenize(ret) - } - #[inline] - fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(Into::into) - } - #[inline] - fn abi_decode_returns_validate( - data: &[u8], - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Into::into) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `getAllowAccountConsensusTxSenders(bytes32,address)` and selector `0xae953186`. -```solidity -function getAllowAccountConsensusTxSenders(bytes32 ctHandle, address accountAddress) external view returns (address[] memory); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct getAllowAccountConsensusTxSendersCall { - #[allow(missing_docs)] - pub ctHandle: alloy::sol_types::private::FixedBytes<32>, - #[allow(missing_docs)] - pub accountAddress: alloy::sol_types::private::Address, - } - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`getAllowAccountConsensusTxSenders(bytes32,address)`](getAllowAccountConsensusTxSendersCall) function. - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct getAllowAccountConsensusTxSendersReturn { - #[allow(missing_docs)] - pub _0: alloy::sol_types::private::Vec, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Address, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::FixedBytes<32>, - alloy::sol_types::private::Address, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getAllowAccountConsensusTxSendersCall) -> Self { - (value.ctHandle, value.accountAddress) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for getAllowAccountConsensusTxSendersCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - ctHandle: tuple.0, - accountAddress: tuple.1, - } - } - } - } - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Array, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Vec, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getAllowAccountConsensusTxSendersReturn) -> Self { - (value._0,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for getAllowAccountConsensusTxSendersReturn { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolCall for getAllowAccountConsensusTxSendersCall { - type Parameters<'a> = ( - alloy::sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Address, - ); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >; - type ReturnTuple<'a> = ( - alloy::sol_types::sol_data::Array, - ); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getAllowAccountConsensusTxSenders(bytes32,address)"; - const SELECTOR: [u8; 4] = [174u8, 149u8, 49u8, 134u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.ctHandle), - ::tokenize( - &self.accountAddress, - ), - ) - } - #[inline] - fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - ( - as alloy_sol_types::SolType>::tokenize(ret), - ) + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { @@ -2392,359 +1552,21 @@ function getAllowPublicDecryptConsensusTxSenders(bytes32 ctHandle) external view }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `getDelegateAccountConsensusTxSenders(uint256,(address,address),address[])` and selector `0xad8b0b2b`. -```solidity -function getDelegateAccountConsensusTxSenders(uint256 chainId, DelegationAccounts memory delegationAccounts, address[] memory contractAddresses) external view returns (address[] memory); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct getDelegateAccountConsensusTxSendersCall { - #[allow(missing_docs)] - pub chainId: alloy::sol_types::private::primitives::aliases::U256, - #[allow(missing_docs)] - pub delegationAccounts: ::RustType, - #[allow(missing_docs)] - pub contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - } - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`getDelegateAccountConsensusTxSenders(uint256,(address,address),address[])`](getDelegateAccountConsensusTxSendersCall) function. - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct getDelegateAccountConsensusTxSendersReturn { - #[allow(missing_docs)] - pub _0: alloy::sol_types::private::Vec, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ::RustType, - alloy::sol_types::private::Vec, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getDelegateAccountConsensusTxSendersCall) -> Self { - (value.chainId, value.delegationAccounts, value.contractAddresses) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for getDelegateAccountConsensusTxSendersCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - chainId: tuple.0, - delegationAccounts: tuple.1, - contractAddresses: tuple.2, - } - } - } - } - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Array, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Vec, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getDelegateAccountConsensusTxSendersReturn) -> Self { - (value._0,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for getDelegateAccountConsensusTxSendersReturn { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolCall for getDelegateAccountConsensusTxSendersCall { - type Parameters<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, - ); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >; - type ReturnTuple<'a> = ( - alloy::sol_types::sol_data::Array, - ); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getDelegateAccountConsensusTxSenders(uint256,(address,address),address[])"; - const SELECTOR: [u8; 4] = [173u8, 139u8, 11u8, 43u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.chainId), - ::tokenize( - &self.delegationAccounts, - ), - as alloy_sol_types::SolType>::tokenize(&self.contractAddresses), - ) - } - #[inline] - fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - ( - as alloy_sol_types::SolType>::tokenize(ret), - ) - } - #[inline] - fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: getDelegateAccountConsensusTxSendersReturn = r.into(); - r._0 - }) - } - #[inline] - fn abi_decode_returns_validate( - data: &[u8], - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: getDelegateAccountConsensusTxSendersReturn = r.into(); - r._0 - }) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `getVersion()` and selector `0x0d8e6e2c`. -```solidity -function getVersion() external pure returns (string memory); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct getVersionCall; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`getVersion()`](getVersionCall) function. - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct getVersionReturn { - #[allow(missing_docs)] - pub _0: alloy::sol_types::private::String, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getVersionCall) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for getVersionCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self - } - } - } - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getVersionReturn) -> Self { - (value._0,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for getVersionReturn { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolCall for getVersionCall { - type Parameters<'a> = (); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::String; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getVersion()"; - const SELECTOR: [u8; 4] = [13u8, 142u8, 110u8, 44u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - () - } - #[inline] - fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - ( - ::tokenize( - ret, - ), - ) - } - #[inline] - fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: getVersionReturn = r.into(); - r._0 - }) - } - #[inline] - fn abi_decode_returns_validate( - data: &[u8], - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: getVersionReturn = r.into(); - r._0 - }) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `isAccountAllowed(bytes32,address)` and selector `0xc6528f69`. + /**Function with signature `getVersion()` and selector `0x0d8e6e2c`. ```solidity -function isAccountAllowed(bytes32 ctHandle, address accountAddress) external view returns (bool); +function getVersion() external pure returns (string memory); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct isAccountAllowedCall { - #[allow(missing_docs)] - pub ctHandle: alloy::sol_types::private::FixedBytes<32>, - #[allow(missing_docs)] - pub accountAddress: alloy::sol_types::private::Address, - } + pub struct getVersionCall; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`isAccountAllowed(bytes32,address)`](isAccountAllowedCall) function. + ///Container type for the return parameters of the [`getVersion()`](getVersionCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct isAccountAllowedReturn { + pub struct getVersionReturn { #[allow(missing_docs)] - pub _0: bool, + pub _0: alloy::sol_types::private::String, } #[allow( non_camel_case_types, @@ -2756,15 +1578,9 @@ function isAccountAllowed(bytes32 ctHandle, address accountAddress) external vie use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Address, - ); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::FixedBytes<32>, - alloy::sol_types::private::Address, - ); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2778,29 +1594,24 @@ function isAccountAllowed(bytes32 ctHandle, address accountAddress) external vie } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: isAccountAllowedCall) -> Self { - (value.ctHandle, value.accountAddress) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getVersionCall) -> Self { + () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for isAccountAllowedCall { + impl ::core::convert::From> for getVersionCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - ctHandle: tuple.0, - accountAddress: tuple.1, - } + Self } } } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (bool,); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2814,37 +1625,32 @@ function isAccountAllowed(bytes32 ctHandle, address accountAddress) external vie } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: isAccountAllowedReturn) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getVersionReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for isAccountAllowedReturn { + impl ::core::convert::From> for getVersionReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for isAccountAllowedCall { - type Parameters<'a> = ( - alloy::sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Address, - ); + impl alloy_sol_types::SolCall for getVersionCall { + type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = bool; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type Return = alloy::sol_types::private::String; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "isAccountAllowed(bytes32,address)"; - const SELECTOR: [u8; 4] = [198u8, 82u8, 143u8, 105u8]; + const SIGNATURE: &'static str = "getVersion()"; + const SELECTOR: [u8; 4] = [13u8, 142u8, 110u8, 44u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -2853,19 +1659,12 @@ function isAccountAllowed(bytes32 ctHandle, address accountAddress) external vie } #[inline] fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.ctHandle), - ::tokenize( - &self.accountAddress, - ), - ) + () } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - ::tokenize( + ::tokenize( ret, ), ) @@ -2876,7 +1675,7 @@ function isAccountAllowed(bytes32 ctHandle, address accountAddress) external vie '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: isAccountAllowedReturn = r.into(); + let r: getVersionReturn = r.into(); r._0 }) } @@ -2888,7 +1687,7 @@ function isAccountAllowed(bytes32 ctHandle, address accountAddress) external vie '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: isAccountAllowedReturn = r.into(); + let r: getVersionReturn = r.into(); r._0 }) } @@ -2896,28 +1695,24 @@ function isAccountAllowed(bytes32 ctHandle, address accountAddress) external vie }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `isAccountDelegated(uint256,(address,address),address[])` and selector `0x2b13591c`. + /**Function with signature `isAccountAllowed(bytes32,address)` and selector `0xc6528f69`. ```solidity -function isAccountDelegated(uint256 chainId, DelegationAccounts memory delegationAccounts, address[] memory contractAddresses) external view returns (bool); +function isAccountAllowed(bytes32 ctHandle, address accountAddress) external view returns (bool); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct isAccountDelegatedCall { - #[allow(missing_docs)] - pub chainId: alloy::sol_types::private::primitives::aliases::U256, + pub struct isAccountAllowedCall { #[allow(missing_docs)] - pub delegationAccounts: ::RustType, + pub ctHandle: alloy::sol_types::private::FixedBytes<32>, #[allow(missing_docs)] - pub contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, + pub accountAddress: alloy::sol_types::private::Address, } #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`isAccountDelegated(uint256,(address,address),address[])`](isAccountDelegatedCall) function. + ///Container type for the return parameters of the [`isAccountAllowed(bytes32,address)`](isAccountAllowedCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct isAccountDelegatedReturn { + pub struct isAccountAllowedReturn { #[allow(missing_docs)] pub _0: bool, } @@ -2932,15 +1727,13 @@ function isAccountDelegated(uint256 chainId, DelegationAccounts memory delegatio { #[doc(hidden)] type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, + alloy::sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, ); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ::RustType, - alloy::sol_types::private::Vec, + alloy::sol_types::private::FixedBytes<32>, + alloy::sol_types::private::Address, ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] @@ -2955,21 +1748,20 @@ function isAccountDelegated(uint256 chainId, DelegationAccounts memory delegatio } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: isAccountDelegatedCall) -> Self { - (value.chainId, value.delegationAccounts, value.contractAddresses) + fn from(value: isAccountAllowedCall) -> Self { + (value.ctHandle, value.accountAddress) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for isAccountDelegatedCall { + for isAccountAllowedCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { - chainId: tuple.0, - delegationAccounts: tuple.1, - contractAddresses: tuple.2, + ctHandle: tuple.0, + accountAddress: tuple.1, } } } @@ -2992,27 +1784,26 @@ function isAccountDelegated(uint256 chainId, DelegationAccounts memory delegatio } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: isAccountDelegatedReturn) -> Self { + fn from(value: isAccountAllowedReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for isAccountDelegatedReturn { + for isAccountAllowedReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for isAccountDelegatedCall { + impl alloy_sol_types::SolCall for isAccountAllowedCall { type Parameters<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, + alloy::sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, ); type Token<'a> = = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "isAccountDelegated(uint256,(address,address),address[])"; - const SELECTOR: [u8; 4] = [43u8, 19u8, 89u8, 28u8]; + const SIGNATURE: &'static str = "isAccountAllowed(bytes32,address)"; + const SELECTOR: [u8; 4] = [198u8, 82u8, 143u8, 105u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -3033,15 +1824,12 @@ function isAccountDelegated(uint256 chainId, DelegationAccounts memory delegatio #[inline] fn tokenize(&self) -> Self::Token<'_> { ( - as alloy_sol_types::SolType>::tokenize(&self.chainId), - ::tokenize( - &self.delegationAccounts, + as alloy_sol_types::SolType>::tokenize(&self.ctHandle), + ::tokenize( + &self.accountAddress, ), - as alloy_sol_types::SolType>::tokenize(&self.contractAddresses), ) } #[inline] @@ -3058,7 +1846,7 @@ function isAccountDelegated(uint256 chainId, DelegationAccounts memory delegatio '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: isAccountDelegatedReturn = r.into(); + let r: isAccountAllowedReturn = r.into(); r._0 }) } @@ -3070,7 +1858,7 @@ function isAccountDelegated(uint256 chainId, DelegationAccounts memory delegatio '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: isAccountDelegatedReturn = r.into(); + let r: isAccountAllowedReturn = r.into(); r._0 }) } @@ -3239,22 +2027,16 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); #[allow(missing_docs)] allowPublicDecrypt(allowPublicDecryptCall), #[allow(missing_docs)] - delegateAccount(delegateAccountCall), - #[allow(missing_docs)] getAllowAccountConsensusTxSenders(getAllowAccountConsensusTxSendersCall), #[allow(missing_docs)] getAllowPublicDecryptConsensusTxSenders( getAllowPublicDecryptConsensusTxSendersCall, ), #[allow(missing_docs)] - getDelegateAccountConsensusTxSenders(getDelegateAccountConsensusTxSendersCall), - #[allow(missing_docs)] getVersion(getVersionCall), #[allow(missing_docs)] isAccountAllowed(isAccountAllowedCall), #[allow(missing_docs)] - isAccountDelegated(isAccountDelegatedCall), - #[allow(missing_docs)] isPublicDecryptAllowed(isPublicDecryptAllowedCall), } #[automatically_derived] @@ -3269,20 +2051,17 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); [6u8, 32u8, 50u8, 109u8], [13u8, 142u8, 110u8, 44u8], [41u8, 74u8, 135u8, 5u8], - [43u8, 19u8, 89u8, 28u8], [151u8, 196u8, 154u8, 64u8], - [173u8, 139u8, 11u8, 43u8], [174u8, 149u8, 49u8, 134u8], [198u8, 82u8, 143u8, 105u8], [217u8, 7u8, 36u8, 181u8], - [244u8, 197u8, 244u8, 147u8], ]; } #[automatically_derived] impl alloy_sol_types::SolInterface for IMultichainACLCalls { const NAME: &'static str = "IMultichainACLCalls"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 10usize; + const COUNT: usize = 7usize; #[inline] fn selector(&self) -> [u8; 4] { match self { @@ -3292,27 +2071,18 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); Self::allowPublicDecrypt(_) => { ::SELECTOR } - Self::delegateAccount(_) => { - ::SELECTOR - } Self::getAllowAccountConsensusTxSenders(_) => { ::SELECTOR } Self::getAllowPublicDecryptConsensusTxSenders(_) => { ::SELECTOR } - Self::getDelegateAccountConsensusTxSenders(_) => { - ::SELECTOR - } Self::getVersion(_) => { ::SELECTOR } Self::isAccountAllowed(_) => { ::SELECTOR } - Self::isAccountDelegated(_) => { - ::SELECTOR - } Self::isPublicDecryptAllowed(_) => { ::SELECTOR } @@ -3368,17 +2138,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); } allowAccount }, - { - fn isAccountDelegated( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(IMultichainACLCalls::isAccountDelegated) - } - isAccountDelegated - }, { fn getAllowPublicDecryptConsensusTxSenders( data: &[u8], @@ -3392,19 +2151,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); } getAllowPublicDecryptConsensusTxSenders }, - { - fn getDelegateAccountConsensusTxSenders( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map( - IMultichainACLCalls::getDelegateAccountConsensusTxSenders, - ) - } - getDelegateAccountConsensusTxSenders - }, { fn getAllowAccountConsensusTxSenders( data: &[u8], @@ -3438,17 +2184,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); } allowPublicDecrypt }, - { - fn delegateAccount( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(IMultichainACLCalls::delegateAccount) - } - delegateAccount - }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { return Err( @@ -3502,17 +2237,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); } allowAccount }, - { - fn isAccountDelegated( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(IMultichainACLCalls::isAccountDelegated) - } - isAccountDelegated - }, { fn getAllowPublicDecryptConsensusTxSenders( data: &[u8], @@ -3526,19 +2250,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); } getAllowPublicDecryptConsensusTxSenders }, - { - fn getDelegateAccountConsensusTxSenders( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map( - IMultichainACLCalls::getDelegateAccountConsensusTxSenders, - ) - } - getDelegateAccountConsensusTxSenders - }, { fn getAllowAccountConsensusTxSenders( data: &[u8], @@ -3572,17 +2283,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); } allowPublicDecrypt }, - { - fn delegateAccount( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(IMultichainACLCalls::delegateAccount) - } - delegateAccount - }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { return Err( @@ -3607,11 +2307,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); inner, ) } - Self::delegateAccount(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::getAllowAccountConsensusTxSenders(inner) => { ::abi_encoded_size( inner, @@ -3622,11 +2317,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); inner, ) } - Self::getDelegateAccountConsensusTxSenders(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::getVersion(inner) => { ::abi_encoded_size(inner) } @@ -3635,11 +2325,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); inner, ) } - Self::isAccountDelegated(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::isPublicDecryptAllowed(inner) => { ::abi_encoded_size( inner, @@ -3662,12 +2347,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); out, ) } - Self::delegateAccount(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::getAllowAccountConsensusTxSenders(inner) => { ::abi_encode_raw( inner, @@ -3680,12 +2359,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); out, ) } - Self::getDelegateAccountConsensusTxSenders(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::getVersion(inner) => { ::abi_encode_raw( inner, @@ -3698,12 +2371,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); out, ) } - Self::isAccountDelegated(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::isPublicDecryptAllowed(inner) => { ::abi_encode_raw( inner, @@ -3724,8 +2391,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); #[allow(missing_docs)] CoprocessorAlreadyAllowedPublicDecrypt(CoprocessorAlreadyAllowedPublicDecrypt), #[allow(missing_docs)] - CoprocessorAlreadyDelegated(CoprocessorAlreadyDelegated), - #[allow(missing_docs)] EmptyContractAddresses(EmptyContractAddresses), } #[automatically_derived] @@ -3737,7 +2402,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); /// /// Prefer using `SolInterface` methods instead. pub const SELECTORS: &'static [[u8; 4usize]] = &[ - [12u8, 198u8, 149u8, 173u8], [87u8, 207u8, 162u8, 23u8], [102u8, 55u8, 227u8, 45u8], [166u8, 240u8, 77u8, 38u8], @@ -3748,7 +2412,7 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); impl alloy_sol_types::SolInterface for IMultichainACLErrors { const NAME: &'static str = "IMultichainACLErrors"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 5usize; + const COUNT: usize = 4usize; #[inline] fn selector(&self) -> [u8; 4] { match self { @@ -3761,9 +2425,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); Self::CoprocessorAlreadyAllowedPublicDecrypt(_) => { ::SELECTOR } - Self::CoprocessorAlreadyDelegated(_) => { - ::SELECTOR - } Self::EmptyContractAddresses(_) => { ::SELECTOR } @@ -3786,17 +2447,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); static DECODE_SHIMS: &[fn( &[u8], ) -> alloy_sol_types::Result] = &[ - { - fn CoprocessorAlreadyDelegated( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(IMultichainACLErrors::CoprocessorAlreadyDelegated) - } - CoprocessorAlreadyDelegated - }, { fn EmptyContractAddresses( data: &[u8], @@ -3863,17 +2513,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); static DECODE_VALIDATE_SHIMS: &[fn( &[u8], ) -> alloy_sol_types::Result] = &[ - { - fn CoprocessorAlreadyDelegated( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(IMultichainACLErrors::CoprocessorAlreadyDelegated) - } - CoprocessorAlreadyDelegated - }, { fn EmptyContractAddresses( data: &[u8], @@ -3949,11 +2588,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); inner, ) } - Self::CoprocessorAlreadyDelegated(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::EmptyContractAddresses(inner) => { ::abi_encoded_size( inner, @@ -3982,12 +2616,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); out, ) } - Self::CoprocessorAlreadyDelegated(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::EmptyContractAddresses(inner) => { ::abi_encode_raw( inner, @@ -4005,8 +2633,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); AllowAccount(AllowAccount), #[allow(missing_docs)] AllowPublicDecrypt(AllowPublicDecrypt), - #[allow(missing_docs)] - DelegateAccount(DelegateAccount), } #[automatically_derived] impl IMultichainACLEvents { @@ -4017,11 +2643,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); /// /// Prefer using `SolInterface` methods instead. pub const SELECTORS: &'static [[u8; 32usize]] = &[ - [ - 6u8, 193u8, 49u8, 85u8, 207u8, 169u8, 3u8, 67u8, 203u8, 79u8, 186u8, - 24u8, 12u8, 232u8, 211u8, 131u8, 180u8, 245u8, 106u8, 91u8, 199u8, 170u8, - 192u8, 229u8, 216u8, 241u8, 148u8, 182u8, 70u8, 114u8, 165u8, 30u8, - ], [ 8u8, 104u8, 236u8, 167u8, 81u8, 38u8, 186u8, 10u8, 70u8, 187u8, 236u8, 94u8, 239u8, 168u8, 131u8, 226u8, 10u8, 19u8, 230u8, 199u8, 217u8, 54u8, @@ -4037,7 +2658,7 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); #[automatically_derived] impl alloy_sol_types::SolEventInterface for IMultichainACLEvents { const NAME: &'static str = "IMultichainACLEvents"; - const COUNT: usize = 3usize; + const COUNT: usize = 2usize; fn decode_raw_log( topics: &[alloy_sol_types::Word], data: &[u8], @@ -4059,13 +2680,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); ) .map(Self::AllowPublicDecrypt) } - Some(::SIGNATURE_HASH) => { - ::decode_raw_log( - topics, - data, - ) - .map(Self::DelegateAccount) - } _ => { alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog { name: ::NAME, @@ -4090,9 +2704,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); Self::AllowPublicDecrypt(inner) => { alloy_sol_types::private::IntoLogData::to_log_data(inner) } - Self::DelegateAccount(inner) => { - alloy_sol_types::private::IntoLogData::to_log_data(inner) - } } } fn into_log_data(self) -> alloy_sol_types::private::LogData { @@ -4103,9 +2714,6 @@ function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); Self::AllowPublicDecrypt(inner) => { alloy_sol_types::private::IntoLogData::into_log_data(inner) } - Self::DelegateAccount(inner) => { - alloy_sol_types::private::IntoLogData::into_log_data(inner) - } } } } @@ -4296,23 +2904,6 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ }, ) } - ///Creates a new call builder for the [`delegateAccount`] function. - pub fn delegateAccount( - &self, - chainId: alloy::sol_types::private::primitives::aliases::U256, - delegationAccounts: ::RustType, - contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - ) -> alloy_contract::SolCallBuilder<&P, delegateAccountCall, N> { - self.call_builder( - &delegateAccountCall { - chainId, - delegationAccounts, - contractAddresses, - }, - ) - } ///Creates a new call builder for the [`getAllowAccountConsensusTxSenders`] function. pub fn getAllowAccountConsensusTxSenders( &self, @@ -4345,27 +2936,6 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ }, ) } - ///Creates a new call builder for the [`getDelegateAccountConsensusTxSenders`] function. - pub fn getDelegateAccountConsensusTxSenders( - &self, - chainId: alloy::sol_types::private::primitives::aliases::U256, - delegationAccounts: ::RustType, - contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - ) -> alloy_contract::SolCallBuilder< - &P, - getDelegateAccountConsensusTxSendersCall, - N, - > { - self.call_builder( - &getDelegateAccountConsensusTxSendersCall { - chainId, - delegationAccounts, - contractAddresses, - }, - ) - } ///Creates a new call builder for the [`getVersion`] function. pub fn getVersion( &self, @@ -4385,23 +2955,6 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ }, ) } - ///Creates a new call builder for the [`isAccountDelegated`] function. - pub fn isAccountDelegated( - &self, - chainId: alloy::sol_types::private::primitives::aliases::U256, - delegationAccounts: ::RustType, - contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - ) -> alloy_contract::SolCallBuilder<&P, isAccountDelegatedCall, N> { - self.call_builder( - &isAccountDelegatedCall { - chainId, - delegationAccounts, - contractAddresses, - }, - ) - } ///Creates a new call builder for the [`isPublicDecryptAllowed`] function. pub fn isPublicDecryptAllowed( &self, @@ -4439,11 +2992,5 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::Event<&P, AllowPublicDecrypt, N> { self.event_filter::() } - ///Creates a new event filter for the [`DelegateAccount`] event. - pub fn DelegateAccount_filter( - &self, - ) -> alloy_contract::Event<&P, DelegateAccount, N> { - self.event_filter::() - } } } diff --git a/gateway-contracts/rust_bindings/src/input_verification.rs b/gateway-contracts/rust_bindings/src/input_verification.rs index 26e51c038..85ada8b81 100644 --- a/gateway-contracts/rust_bindings/src/input_verification.rs +++ b/gateway-contracts/rust_bindings/src/input_verification.rs @@ -775,22 +775,22 @@ pub mod InputVerification { /// The creation / init bytecode of the contract. /// /// ```text - ///0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801562000043575f80fd5b50620000546200005a60201b60201c565b620001c4565b5f6200006b6200015e60201b60201c565b9050805f0160089054906101000a900460ff1615620000b6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146200015b5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051620001529190620001a9565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b620001a38162000185565b82525050565b5f602082019050620001be5f83018462000198565b92915050565b60805161434a620001eb5f395f8181611c8a01528181611cdf0152611f81015261434a5ff3fe6080604052600436106100f2575f3560e01c806352d1902d11610089578063a700499611610058578063a7004996146102ca578063ad3cb1cc146102f2578063ce7e42571461031c578063e96f88ea14610358576100f2565b806352d1902d146102305780635c975abb1461025a5780638456cb591461028457806384b0196e1461029a576100f2565b8063338007fc116100c5578063338007fc146101c057806339f73810146101e85780633f4ba83a146101fe5780634f1ef28614610214576100f2565b80630c615839146100f65780630d8e6e2c146101325780631bbe9fae1461015c57806331bedea314610198575b5f80fd5b348015610101575f80fd5b5061011c60048036038101906101179190612c74565b610394565b6040516101299190612cb9565b60405180910390f35b34801561013d575f80fd5b506101466103c8565b6040516101539190612d5c565b60405180910390f35b348015610167575f80fd5b50610182600480360381019061017d9190612c74565b610443565b60405161018f9190612e63565b60405180910390f35b3480156101a3575f80fd5b506101be60048036038101906101b99190612f39565b6104ed565b005b3480156101cb575f80fd5b506101e660048036038101906101e19190612ffd565b610a4e565b005b3480156101f3575f80fd5b506101fc610dc7565b005b348015610209575f80fd5b50610212610fb3565b005b61022e600480360381019061022991906131ac565b6110fb565b005b34801561023b575f80fd5b5061024461111a565b604051610251919061321e565b60405180910390f35b348015610265575f80fd5b5061026e61114b565b60405161027b9190612cb9565b60405180910390f35b34801561028f575f80fd5b5061029861116d565b005b3480156102a5575f80fd5b506102ae611292565b6040516102c19796959493929190613346565b60405180910390f35b3480156102d5575f80fd5b506102f060048036038101906102eb91906133c8565b61139b565b005b3480156102fd575f80fd5b506103066115db565b6040516103139190612d5c565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190612c74565b611614565b60405161034f9190612e63565b60405180910390f35b348015610363575f80fd5b5061037e60048036038101906103799190612c74565b6116e5565b60405161038b9190612cb9565b60405180910390f35b5f8061039e611719565b9050806007015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b60606040518060400160405280601181526020017f496e707574566572696669636174696f6e0000000000000000000000000000008152506104095f611740565b6104136001611740565b61041c5f611740565b60405160200161042f949392919061354d565b604051602081830303815290604052905090565b60605f61044e611719565b905080600a015f8481526020019081526020015f208054806020026020016040519081016040528092919081815260200182805480156104e057602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610497575b5050505050915050919050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b815260040161053a91906135ab565b602060405180830381865afa158015610555573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061057991906135ee565b6105ba57336040517f52d725f50000000000000000000000000000000000000000000000000000000081526004016105b191906135ab565b60405180910390fd5b5f6105c3611719565b9050805f01548811806105d557505f88145b1561061757876040517f4711083f00000000000000000000000000000000000000000000000000000000815260040161060e9190613619565b60405180910390fd5b5f816001015f8a81526020019081526020015f206040518060600160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090505f6040518060a001604052808a8a808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508152602001836040015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001835f0151815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081525090505f6107d98261180a565b90505f610829828a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050506118c9565b9050610834816118f3565b61083f8c33836119c3565b5f856002015f8e81526020019081526020015f205f8481526020019081526020015f209050808a8a90918060018154018082558091505060019003905f5260205f20015f90919290919290919290919250918261089d929190613836565b506001866005015f8f81526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550856003015f8e81526020019081526020015f205f8481526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550856004015f8e81526020019081526020015f205f9054906101000a900460ff161580156109ba57506109b98180549050611b16565b5b15610a3f576001866004015f8f81526020019081526020015f205f6101000a81548160ff02191690831515021790555082866006015f8f81526020019081526020015f20819055508c7ffe2c43585786a5a658d2ec5df5dea3fb3385b77c94f60f724ff810896f4198358d8d84604051610a3693929190613ac9565b60405180910390a25b50505050505050505050505050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b8152600401610a9b91906135ab565b602060405180830381865afa158015610ab6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ada91906135ee565b610b1b57336040517f52d725f5000000000000000000000000000000000000000000000000000000008152600401610b1291906135ab565b60405180910390fd5b5f610b24611719565b9050805f0154841180610b3657505f84145b15610b7857836040517f4711083f000000000000000000000000000000000000000000000000000000008152600401610b6f9190613619565b60405180910390fd5b5f73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663ef6997f9336040518263ffffffff1660e01b8152600401610bc691906135ab565b5f60405180830381865afa158015610be0573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c089190613c37565b90505f81602001519050610c1d8633836119c3565b826008015f8781526020019081526020015f205f815480929190610c4090613cab565b91905055506001836009015f8881526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555082600a015f8781526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826007015f8781526020019081526020015f205f9054906101000a900460ff16158015610d615750610d60836008015f8881526020019081526020015f2054611b16565b5b15610dbf576001836007015f8881526020019081526020015f205f6101000a81548160ff021916908315150217905550857fe465e141fa8abd95ab7e0855543307f8506ab0170ef664420fb71ab7de0183de60405160405180910390a25b505050505050565b6001610dd1611ba7565b67ffffffffffffffff1614610e12576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f610e1d611bcb565b9050805f0160089054906101000a900460ff1680610e6557508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b15610e9c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff021916908315150217905550610f556040518060400160405280601181526020017f496e707574566572696669636174696f6e0000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250611bf2565b610f5d611c08565b5f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d282604051610fa79190613d14565b60405180910390a15050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611010573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110349190613d2d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156110af575073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156110f157336040517fe19166ee0000000000000000000000000000000000000000000000000000000081526004016110e891906135ab565b60405180910390fd5b6110f9611c1a565b565b611103611c88565b61110c82611d6e565b6111168282611e61565b5050565b5f611123611f7f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b5f80611155612006565b9050805f015f9054906101000a900460ff1691505090565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff166346fbf68e336040518263ffffffff1660e01b81526004016111ba91906135ab565b602060405180830381865afa1580156111d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f991906135ee565b158015611246575073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561128857336040517f388916bb00000000000000000000000000000000000000000000000000000000815260040161127f91906135ab565b60405180910390fd5b61129061202d565b565b5f6060805f805f60605f6112a461209c565b90505f801b815f01541480156112bf57505f801b8160010154145b6112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590613da2565b60405180910390fd5b6113066120c3565b61130e612161565b46305f801b5f67ffffffffffffffff81111561132d5761132c613088565b5b60405190808252806020026020018201604052801561135b5781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b8673a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663bff3aaba826040518263ffffffff1660e01b81526004016113e99190613619565b602060405180830381865afa158015611404573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061142891906135ee565b61146957806040517fb6679c3b0000000000000000000000000000000000000000000000000000000081526004016114609190613619565b60405180910390fd5b6114716121ff565b5f61147a611719565b9050805f015f81548092919061148f90613cab565b91905055505f815f0154905060405180606001604052808b81526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815250826001015f8381526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505089817f4ae54f6a6e900d806ffa5bb46ed91459523d2f6ac9b5d62404feab887686d0058b8b8b8b8b8b6040516115c796959493929190613dfc565b60405180910390a350505050505050505050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60605f61161f611719565b90505f816006015f8581526020019081526020015f20549050816003015f8581526020019081526020015f205f8281526020019081526020015f208054806020026020016040519081016040528092919081815260200182805480156116d757602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161168e575b505050505092505050919050565b5f806116ef611719565b9050806004015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b5f7f4544165ce1653264fdcb09b029891e3d4c8d8583486821172f882e19a149a800905090565b60605f600161174e84612240565b0190505f8167ffffffffffffffff81111561176c5761176b613088565b5b6040519080825280601f01601f19166020018201604052801561179e5781602001600182028036833780820191505090505b5090505f82602001820190505b6001156117ff578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816117f4576117f3613e51565b5b0494505f85036117ab575b819350505050919050565b5f6118c26040518060a00160405280607f81526020016142cb607f913980519060200120835f01516040516020016118429190613f2f565b60405160208183030381529060405280519060200120846020015185604001518660600151876080015160405160200161187c9190613f89565b604051602081830303815290604052805190602001206040516020016118a796959493929190613f9f565b60405160208183030381529060405280519060200120612391565b9050919050565b5f805f806118d786866123aa565b9250925092506118e782826123ff565b82935050505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632b101c03826040518263ffffffff1660e01b815260040161194091906135ab565b602060405180830381865afa15801561195b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197f91906135ee565b6119c057806040517f26cd75dc0000000000000000000000000000000000000000000000000000000081526004016119b791906135ab565b60405180910390fd5b50565b5f6119cc611719565b9050806005015f8581526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611a6f578383836040517ff9ed431f000000000000000000000000000000000000000000000000000000008152600401611a6693929190613ffe565b60405180910390fd5b806009015f8581526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611b10578383836040517f2fa73174000000000000000000000000000000000000000000000000000000008152600401611b0793929190613ffe565b60405180910390fd5b50505050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16636799ef526040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b999190614047565b905080831015915050919050565b5f611bb0611bcb565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b611bfa612561565b611c0482826125a1565b5050565b611c10612561565b611c186125f2565b565b611c22612622565b5f611c2b612006565b90505f815f015f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611c70612662565b604051611c7d91906135ab565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480611d3557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611d1c612669565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611d6c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dcb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611def9190613d2d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e5e57336040517f0e56cf3d000000000000000000000000000000000000000000000000000000008152600401611e5591906135ab565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611ec957506040513d601f19601f82011682018060405250810190611ec6919061409c565b60015b611f0a57816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611f0191906135ab565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b8114611f7057806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401611f67919061321e565b60405180910390fd5b611f7a83836126bc565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614612004576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300905090565b6120356121ff565b5f61203e612006565b90506001815f015f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612084612662565b60405161209191906135ab565b60405180910390a150565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f6120ce61209c565b90508060020180546120df90613669565b80601f016020809104026020016040519081016040528092919081815260200182805461210b90613669565b80156121565780601f1061212d57610100808354040283529160200191612156565b820191905f5260205f20905b81548152906001019060200180831161213957829003601f168201915b505050505091505090565b60605f61216c61209c565b905080600301805461217d90613669565b80601f01602080910402602001604051908101604052809291908181526020018280546121a990613669565b80156121f45780601f106121cb576101008083540402835291602001916121f4565b820191905f5260205f20905b8154815290600101906020018083116121d757829003601f168201915b505050505091505090565b61220761114b565b1561223e576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061229c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161229257612291613e51565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106122d9576d04ee2d6d415b85acef810000000083816122cf576122ce613e51565b5b0492506020810190505b662386f26fc10000831061230857662386f26fc1000083816122fe576122fd613e51565b5b0492506010810190505b6305f5e1008310612331576305f5e100838161232757612326613e51565b5b0492506008810190505b612710831061235657612710838161234c5761234b613e51565b5b0492506004810190505b60648310612379576064838161236f5761236e613e51565b5b0492506002810190505b600a8310612388576001810190505b80915050919050565b5f6123a361239d61272e565b8361273c565b9050919050565b5f805f60418451036123ea575f805f602087015192506040870151915060608701515f1a90506123dc8882858561277c565b9550955095505050506123f8565b5f600285515f1b9250925092505b9250925092565b5f6003811115612412576124116140c7565b5b826003811115612425576124246140c7565b5b031561255d576001600381111561243f5761243e6140c7565b5b826003811115612452576124516140c7565b5b03612489576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561249d5761249c6140c7565b5b8260038111156124b0576124af6140c7565b5b036124f457805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016124eb9190613619565b60405180910390fd5b600380811115612507576125066140c7565b5b82600381111561251a576125196140c7565b5b0361255c57806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401612553919061321e565b60405180910390fd5b5b5050565b612569612863565b61259f576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6125a9612561565b5f6125b261209c565b9050828160020190816125c5919061414c565b50818160030190816125d7919061414c565b505f801b815f01819055505f801b8160010181905550505050565b6125fa612561565b5f612603612006565b90505f815f015f6101000a81548160ff02191690831515021790555050565b61262a61114b565b612660576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f33905090565b5f6126957f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b612881565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6126c58261288a565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156127215761271b8282612953565b5061272a565b6127296129d3565b5b5050565b5f612737612a0f565b905090565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156127b8575f600385925092509250612859565b5f6001888888886040515f81526020016040526040516127db9493929190614236565b6020604051602081039080840390855afa1580156127fb573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361284c575f60015f801b93509350935050612859565b805f805f1b935093509350505b9450945094915050565b5f61286c611bcb565b5f0160089054906101000a900460ff16905090565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b036128e557806040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016128dc91906135ab565b60405180910390fd5b806129117f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b612881565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff168460405161297c9190613f89565b5f60405180830381855af49150503d805f81146129b4576040519150601f19603f3d011682016040523d82523d5f602084013e6129b9565b606091505b50915091506129c9858383612a72565b9250505092915050565b5f341115612a0d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612a39612aff565b612a41612b75565b4630604051602001612a57959493929190614279565b60405160208183030381529060405280519060200120905090565b606082612a8757612a8282612bec565b612af7565b5f8251148015612aad57505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15612aef57836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401612ae691906135ab565b60405180910390fd5b819050612af8565b5b9392505050565b5f80612b0961209c565b90505f612b146120c3565b90505f81511115612b3057808051906020012092505050612b72565b5f825f015490505f801b8114612b4b57809350505050612b72565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f80612b7f61209c565b90505f612b8a612161565b90505f81511115612ba657808051906020012092505050612be9565b5f826001015490505f801b8114612bc257809350505050612be9565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f81511115612bfe5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b612c5381612c41565b8114612c5d575f80fd5b50565b5f81359050612c6e81612c4a565b92915050565b5f60208284031215612c8957612c88612c39565b5b5f612c9684828501612c60565b91505092915050565b5f8115159050919050565b612cb381612c9f565b82525050565b5f602082019050612ccc5f830184612caa565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612d09578082015181840152602081019050612cee565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612d2e82612cd2565b612d388185612cdc565b9350612d48818560208601612cec565b612d5181612d14565b840191505092915050565b5f6020820190508181035f830152612d748184612d24565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612dce82612da5565b9050919050565b612dde81612dc4565b82525050565b5f612def8383612dd5565b60208301905092915050565b5f602082019050919050565b5f612e1182612d7c565b612e1b8185612d86565b9350612e2683612d96565b805f5b83811015612e56578151612e3d8882612de4565b9750612e4883612dfb565b925050600181019050612e29565b5085935050505092915050565b5f6020820190508181035f830152612e7b8184612e07565b905092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612ea457612ea3612e83565b5b8235905067ffffffffffffffff811115612ec157612ec0612e87565b5b602083019150836020820283011115612edd57612edc612e8b565b5b9250929050565b5f8083601f840112612ef957612ef8612e83565b5b8235905067ffffffffffffffff811115612f1657612f15612e87565b5b602083019150836001820283011115612f3257612f31612e8b565b5b9250929050565b5f805f805f805f6080888a031215612f5457612f53612c39565b5b5f612f618a828b01612c60565b975050602088013567ffffffffffffffff811115612f8257612f81612c3d565b5b612f8e8a828b01612e8f565b9650965050604088013567ffffffffffffffff811115612fb157612fb0612c3d565b5b612fbd8a828b01612ee4565b9450945050606088013567ffffffffffffffff811115612fe057612fdf612c3d565b5b612fec8a828b01612ee4565b925092505092959891949750929550565b5f805f6040848603121561301457613013612c39565b5b5f61302186828701612c60565b935050602084013567ffffffffffffffff81111561304257613041612c3d565b5b61304e86828701612ee4565b92509250509250925092565b61306381612dc4565b811461306d575f80fd5b50565b5f8135905061307e8161305a565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6130be82612d14565b810181811067ffffffffffffffff821117156130dd576130dc613088565b5b80604052505050565b5f6130ef612c30565b90506130fb82826130b5565b919050565b5f67ffffffffffffffff82111561311a57613119613088565b5b61312382612d14565b9050602081019050919050565b828183375f83830152505050565b5f61315061314b84613100565b6130e6565b90508281526020810184848401111561316c5761316b613084565b5b613177848285613130565b509392505050565b5f82601f83011261319357613192612e83565b5b81356131a384826020860161313e565b91505092915050565b5f80604083850312156131c2576131c1612c39565b5b5f6131cf85828601613070565b925050602083013567ffffffffffffffff8111156131f0576131ef612c3d565b5b6131fc8582860161317f565b9150509250929050565b5f819050919050565b61321881613206565b82525050565b5f6020820190506132315f83018461320f565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b61326b81613237565b82525050565b61327a81612c41565b82525050565b61328981612dc4565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6132c181612c41565b82525050565b5f6132d283836132b8565b60208301905092915050565b5f602082019050919050565b5f6132f48261328f565b6132fe8185613299565b9350613309836132a9565b805f5b8381101561333957815161332088826132c7565b975061332b836132de565b92505060018101905061330c565b5085935050505092915050565b5f60e0820190506133595f83018a613262565b818103602083015261336b8189612d24565b9050818103604083015261337f8188612d24565b905061338e6060830187613271565b61339b6080830186613280565b6133a860a083018561320f565b81810360c08301526133ba81846132ea565b905098975050505050505050565b5f805f805f805f60a0888a0312156133e3576133e2612c39565b5b5f6133f08a828b01612c60565b97505060206134018a828b01613070565b96505060406134128a828b01613070565b955050606088013567ffffffffffffffff81111561343357613432612c3d565b5b61343f8a828b01612ee4565b9450945050608088013567ffffffffffffffff81111561346257613461612c3d565b5b61346e8a828b01612ee4565b925092505092959891949750929550565b5f81905092915050565b5f61349382612cd2565b61349d818561347f565b93506134ad818560208601612cec565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f6134ed60028361347f565b91506134f8826134b9565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f61353760018361347f565b915061354282613503565b600182019050919050565b5f6135588287613489565b9150613563826134e1565b915061356f8286613489565b915061357a8261352b565b91506135868285613489565b91506135918261352b565b915061359d8284613489565b915081905095945050505050565b5f6020820190506135be5f830184613280565b92915050565b6135cd81612c9f565b81146135d7575f80fd5b50565b5f815190506135e8816135c4565b92915050565b5f6020828403121561360357613602612c39565b5b5f613610848285016135da565b91505092915050565b5f60208201905061362c5f830184613271565b92915050565b5f82905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061368057607f821691505b6020821081036136935761369261363c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026136f57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826136ba565b6136ff86836136ba565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61373a61373561373084612c41565b613717565b612c41565b9050919050565b5f819050919050565b61375383613720565b61376761375f82613741565b8484546136c6565b825550505050565b5f90565b61377b61376f565b61378681848461374a565b505050565b5b818110156137a95761379e5f82613773565b60018101905061378c565b5050565b601f8211156137ee576137bf81613699565b6137c8846136ab565b810160208510156137d7578190505b6137eb6137e3856136ab565b83018261378b565b50505b505050565b5f82821c905092915050565b5f61380e5f19846008026137f3565b1980831691505092915050565b5f61382683836137ff565b9150826002028217905092915050565b6138408383613632565b67ffffffffffffffff81111561385957613858613088565b5b6138638254613669565b61386e8282856137ad565b5f601f83116001811461389b575f8415613889578287013590505b613893858261381b565b8655506138fa565b601f1984166138a986613699565b5f5b828110156138d0578489013582556001820191506020850194506020810190506138ab565b868310156138ed57848901356138e9601f8916826137ff565b8355505b6001600288020188555050505b50505050505050565b5f82825260208201905092915050565b5f80fd5b82818337505050565b5f61392b8385613903565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561395e5761395d613913565b5b60208302925061396f838584613917565b82840190509392505050565b5f81549050919050565b5f82825260208201905092915050565b5f819050815f5260205f209050919050565b5f82825260208201905092915050565b5f81546139c381613669565b6139cd81866139a7565b9450600182165f81146139e757600181146139fd57613a2f565b60ff198316865281151560200286019350613a2f565b613a0685613699565b5f5b83811015613a2757815481890152600182019150602081019050613a08565b808801955050505b50505092915050565b5f613a4383836139b7565b905092915050565b5f600182019050919050565b5f613a618261397b565b613a6b8185613985565b935083602082028501613a7d85613995565b805f5b85811015613ab757848403895281613a988582613a38565b9450613aa383613a4b565b925060208a01995050600181019050613a80565b50829750879550505050505092915050565b5f6040820190508181035f830152613ae2818587613920565b90508181036020830152613af68184613a57565b9050949350505050565b5f80fd5b5f80fd5b5f81519050613b168161305a565b92915050565b5f67ffffffffffffffff821115613b3657613b35613088565b5b613b3f82612d14565b9050602081019050919050565b5f613b5e613b5984613b1c565b6130e6565b905082815260208101848484011115613b7a57613b79613084565b5b613b85848285612cec565b509392505050565b5f82601f830112613ba157613ba0612e83565b5b8151613bb1848260208601613b4c565b91505092915050565b5f60608284031215613bcf57613bce613b00565b5b613bd960606130e6565b90505f613be884828501613b08565b5f830152506020613bfb84828501613b08565b602083015250604082015167ffffffffffffffff811115613c1f57613c1e613b04565b5b613c2b84828501613b8d565b60408301525092915050565b5f60208284031215613c4c57613c4b612c39565b5b5f82015167ffffffffffffffff811115613c6957613c68612c3d565b5b613c7584828501613bba565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613cb582612c41565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ce757613ce6613c7e565b5b600182019050919050565b5f67ffffffffffffffff82169050919050565b613d0e81613cf2565b82525050565b5f602082019050613d275f830184613d05565b92915050565b5f60208284031215613d4257613d41612c39565b5b5f613d4f84828501613b08565b91505092915050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f613d8c601583612cdc565b9150613d9782613d58565b602082019050919050565b5f6020820190508181035f830152613db981613d80565b9050919050565b5f82825260208201905092915050565b5f613ddb8385613dc0565b9350613de8838584613130565b613df183612d14565b840190509392505050565b5f608082019050613e0f5f830189613280565b613e1c6020830188613280565b8181036040830152613e2f818688613dd0565b90508181036060830152613e44818486613dd0565b9050979650505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f81519050919050565b5f81905092915050565b5f819050602082019050919050565b613eaa81613206565b82525050565b5f613ebb8383613ea1565b60208301905092915050565b5f602082019050919050565b5f613edd82613e7e565b613ee78185613e88565b9350613ef283613e92565b805f5b83811015613f22578151613f098882613eb0565b9750613f1483613ec7565b925050600181019050613ef5565b5085935050505092915050565b5f613f3a8284613ed3565b915081905092915050565b5f81519050919050565b5f81905092915050565b5f613f6382613f45565b613f6d8185613f4f565b9350613f7d818560208601612cec565b80840191505092915050565b5f613f948284613f59565b915081905092915050565b5f60c082019050613fb25f83018961320f565b613fbf602083018861320f565b613fcc6040830187613280565b613fd96060830186613280565b613fe66080830185613271565b613ff360a083018461320f565b979650505050505050565b5f6060820190506140115f830186613271565b61401e6020830185613280565b61402b6040830184613280565b949350505050565b5f8151905061404181612c4a565b92915050565b5f6020828403121561405c5761405b612c39565b5b5f61406984828501614033565b91505092915050565b61407b81613206565b8114614085575f80fd5b50565b5f8151905061409681614072565b92915050565b5f602082840312156140b1576140b0612c39565b5b5f6140be84828501614088565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f819050815f5260205f209050919050565b601f82111561414757614118816140f4565b614121846136ab565b81016020851015614130578190505b61414461413c856136ab565b83018261378b565b50505b505050565b61415582612cd2565b67ffffffffffffffff81111561416e5761416d613088565b5b6141788254613669565b614183828285614106565b5f60209050601f8311600181146141b4575f84156141a2578287015190505b6141ac858261381b565b865550614213565b601f1984166141c2866140f4565b5f5b828110156141e9578489015182556001820191506020850194506020810190506141c4565b868310156142065784890151614202601f8916826137ff565b8355505b6001600288020188555050505b505050505050565b5f60ff82169050919050565b6142308161421b565b82525050565b5f6080820190506142495f83018761320f565b6142566020830186614227565b614263604083018561320f565b614270606083018461320f565b95945050505050565b5f60a08201905061428c5f83018861320f565b614299602083018761320f565b6142a6604083018661320f565b6142b36060830185613271565b6142c06080830184613280565b969550505050505056fe43697068657274657874566572696669636174696f6e28627974657333325b5d20637448616e646c65732c616464726573732075736572416464726573732c6164647265737320636f6e7472616374416464726573732c75696e7432353620636f6e7472616374436861696e49642c62797465732065787472614461746129 + ///0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801562000043575f80fd5b50620000546200005a60201b60201c565b620001c4565b5f6200006b6200015e60201b60201c565b9050805f0160089054906101000a900460ff1615620000b6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146200015b5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051620001529190620001a9565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b620001a38162000185565b82525050565b5f602082019050620001be5f83018462000198565b92915050565b608051614363620001eb5f395f8181611ca301528181611cf80152611f9a01526143635ff3fe6080604052600436106100f2575f3560e01c806352d1902d11610089578063a700499611610058578063a7004996146102ca578063ad3cb1cc146102f2578063ce7e42571461031c578063e96f88ea14610358576100f2565b806352d1902d146102305780635c975abb1461025a5780638456cb591461028457806384b0196e1461029a576100f2565b8063338007fc116100c5578063338007fc146101c057806339f73810146101e85780633f4ba83a146101fe5780634f1ef28614610214576100f2565b80630c615839146100f65780630d8e6e2c146101325780631bbe9fae1461015c57806331bedea314610198575b5f80fd5b348015610101575f80fd5b5061011c60048036038101906101179190612c8d565b610394565b6040516101299190612cd2565b60405180910390f35b34801561013d575f80fd5b506101466103c8565b6040516101539190612d75565b60405180910390f35b348015610167575f80fd5b50610182600480360381019061017d9190612c8d565b610443565b60405161018f9190612e7c565b60405180910390f35b3480156101a3575f80fd5b506101be60048036038101906101b99190612f52565b6104ed565b005b3480156101cb575f80fd5b506101e660048036038101906101e19190613016565b610a4e565b005b3480156101f3575f80fd5b506101fc610dc7565b005b348015610209575f80fd5b50610212610fb3565b005b61022e600480360381019061022991906131c5565b6110fb565b005b34801561023b575f80fd5b5061024461111a565b6040516102519190613237565b60405180910390f35b348015610265575f80fd5b5061026e61114b565b60405161027b9190612cd2565b60405180910390f35b34801561028f575f80fd5b5061029861116d565b005b3480156102a5575f80fd5b506102ae611292565b6040516102c1979695949392919061335f565b60405180910390f35b3480156102d5575f80fd5b506102f060048036038101906102eb91906133e1565b61139b565b005b3480156102fd575f80fd5b506103066115f4565b6040516103139190612d75565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190612c8d565b61162d565b60405161034f9190612e7c565b60405180910390f35b348015610363575f80fd5b5061037e60048036038101906103799190612c8d565b6116fe565b60405161038b9190612cd2565b60405180910390f35b5f8061039e611732565b9050806007015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b60606040518060400160405280601181526020017f496e707574566572696669636174696f6e0000000000000000000000000000008152506104095f611759565b6104136001611759565b61041c5f611759565b60405160200161042f9493929190613566565b604051602081830303815290604052905090565b60605f61044e611732565b905080600a015f8481526020019081526020015f208054806020026020016040519081016040528092919081815260200182805480156104e057602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610497575b5050505050915050919050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b815260040161053a91906135c4565b602060405180830381865afa158015610555573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105799190613607565b6105ba57336040517f52d725f50000000000000000000000000000000000000000000000000000000081526004016105b191906135c4565b60405180910390fd5b5f6105c3611732565b9050805f01548811806105d557505f88145b1561061757876040517f4711083f00000000000000000000000000000000000000000000000000000000815260040161060e9190613632565b60405180910390fd5b5f816001015f8a81526020019081526020015f206040518060600160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090505f6040518060a001604052808a8a808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508152602001836040015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001835f0151815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081525090505f6107d982611823565b90505f610829828a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050506118e2565b90506108348161190c565b61083f8c33836119dc565b5f856002015f8e81526020019081526020015f205f8481526020019081526020015f209050808a8a90918060018154018082558091505060019003905f5260205f20015f90919290919290919290919250918261089d92919061384f565b506001866005015f8f81526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550856003015f8e81526020019081526020015f205f8481526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550856004015f8e81526020019081526020015f205f9054906101000a900460ff161580156109ba57506109b98180549050611b2f565b5b15610a3f576001866004015f8f81526020019081526020015f205f6101000a81548160ff02191690831515021790555082866006015f8f81526020019081526020015f20819055508c7ffe2c43585786a5a658d2ec5df5dea3fb3385b77c94f60f724ff810896f4198358d8d84604051610a3693929190613ae2565b60405180910390a25b50505050505050505050505050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b8152600401610a9b91906135c4565b602060405180830381865afa158015610ab6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ada9190613607565b610b1b57336040517f52d725f5000000000000000000000000000000000000000000000000000000008152600401610b1291906135c4565b60405180910390fd5b5f610b24611732565b9050805f0154841180610b3657505f84145b15610b7857836040517f4711083f000000000000000000000000000000000000000000000000000000008152600401610b6f9190613632565b60405180910390fd5b5f73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663ef6997f9336040518263ffffffff1660e01b8152600401610bc691906135c4565b5f60405180830381865afa158015610be0573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c089190613c50565b90505f81602001519050610c1d8633836119dc565b826008015f8781526020019081526020015f205f815480929190610c4090613cc4565b91905055506001836009015f8881526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555082600a015f8781526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826007015f8781526020019081526020015f205f9054906101000a900460ff16158015610d615750610d60836008015f8881526020019081526020015f2054611b2f565b5b15610dbf576001836007015f8881526020019081526020015f205f6101000a81548160ff021916908315150217905550857fe465e141fa8abd95ab7e0855543307f8506ab0170ef664420fb71ab7de0183de60405160405180910390a25b505050505050565b6001610dd1611bc0565b67ffffffffffffffff1614610e12576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f610e1d611be4565b9050805f0160089054906101000a900460ff1680610e6557508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b15610e9c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff021916908315150217905550610f556040518060400160405280601181526020017f496e707574566572696669636174696f6e0000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250611c0b565b610f5d611c21565b5f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d282604051610fa79190613d2d565b60405180910390a15050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611010573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110349190613d46565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156110af575073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156110f157336040517fe19166ee0000000000000000000000000000000000000000000000000000000081526004016110e891906135c4565b60405180910390fd5b6110f9611c33565b565b611103611ca1565b61110c82611d87565b6111168282611e7a565b5050565b5f611123611f98565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b5f8061115561201f565b9050805f015f9054906101000a900460ff1691505090565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff166346fbf68e336040518263ffffffff1660e01b81526004016111ba91906135c4565b602060405180830381865afa1580156111d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f99190613607565b158015611246575073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561128857336040517f388916bb00000000000000000000000000000000000000000000000000000000815260040161127f91906135c4565b60405180910390fd5b611290612046565b565b5f6060805f805f60605f6112a46120b5565b90505f801b815f01541480156112bf57505f801b8160010154145b6112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590613dbb565b60405180910390fd5b6113066120dc565b61130e61217a565b46305f801b5f67ffffffffffffffff81111561132d5761132c6130a1565b5b60405190808252806020026020018201604052801561135b5781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b8673a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663bff3aaba826040518263ffffffff1660e01b81526004016113e99190613632565b602060405180830381865afa158015611404573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114289190613607565b61146957806040517fb6679c3b0000000000000000000000000000000000000000000000000000000081526004016114609190613632565b60405180910390fd5b611471612218565b5f61147a611732565b9050805f015f81548092919061148f90613cc4565b91905055505f815f0154905060405180606001604052808b81526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815250826001015f8381526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600182600b015f8381526020019081526020015f208190555089817f4ae54f6a6e900d806ffa5bb46ed91459523d2f6ac9b5d62404feab887686d0058b8b8b8b8b8b6040516115e096959493929190613e15565b60405180910390a350505050505050505050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60605f611638611732565b90505f816006015f8581526020019081526020015f20549050816003015f8581526020019081526020015f205f8281526020019081526020015f208054806020026020016040519081016040528092919081815260200182805480156116f057602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116116a7575b505050505092505050919050565b5f80611708611732565b9050806004015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b5f7f4544165ce1653264fdcb09b029891e3d4c8d8583486821172f882e19a149a800905090565b60605f600161176784612259565b0190505f8167ffffffffffffffff811115611785576117846130a1565b5b6040519080825280601f01601f1916602001820160405280156117b75781602001600182028036833780820191505090505b5090505f82602001820190505b600115611818578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161180d5761180c613e6a565b5b0494505f85036117c4575b819350505050919050565b5f6118db6040518060a00160405280607f81526020016142e4607f913980519060200120835f015160405160200161185b9190613f48565b6040516020818303038152906040528051906020012084602001518560400151866060015187608001516040516020016118959190613fa2565b604051602081830303815290604052805190602001206040516020016118c096959493929190613fb8565b604051602081830303815290604052805190602001206123aa565b9050919050565b5f805f806118f086866123c3565b9250925092506119008282612418565b82935050505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632b101c03826040518263ffffffff1660e01b815260040161195991906135c4565b602060405180830381865afa158015611974573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119989190613607565b6119d957806040517f26cd75dc0000000000000000000000000000000000000000000000000000000081526004016119d091906135c4565b60405180910390fd5b50565b5f6119e5611732565b9050806005015f8581526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611a88578383836040517ff9ed431f000000000000000000000000000000000000000000000000000000008152600401611a7f93929190614017565b60405180910390fd5b806009015f8581526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611b29578383836040517f2fa73174000000000000000000000000000000000000000000000000000000008152600401611b2093929190614017565b60405180910390fd5b50505050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16636799ef526040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bb29190614060565b905080831015915050919050565b5f611bc9611be4565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b611c1361257a565b611c1d82826125ba565b5050565b611c2961257a565b611c3161260b565b565b611c3b61263b565b5f611c4461201f565b90505f815f015f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611c8961267b565b604051611c9691906135c4565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480611d4e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611d35612682565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611d85576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611de4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e089190613d46565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e7757336040517f0e56cf3d000000000000000000000000000000000000000000000000000000008152600401611e6e91906135c4565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611ee257506040513d601f19601f82011682018060405250810190611edf91906140b5565b60015b611f2357816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611f1a91906135c4565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b8114611f8957806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401611f809190613237565b60405180910390fd5b611f9383836126d5565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461201d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300905090565b61204e612218565b5f61205761201f565b90506001815f015f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861209d61267b565b6040516120aa91906135c4565b60405180910390a150565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f6120e76120b5565b90508060020180546120f890613682565b80601f016020809104026020016040519081016040528092919081815260200182805461212490613682565b801561216f5780601f106121465761010080835404028352916020019161216f565b820191905f5260205f20905b81548152906001019060200180831161215257829003601f168201915b505050505091505090565b60605f6121856120b5565b905080600301805461219690613682565b80601f01602080910402602001604051908101604052809291908181526020018280546121c290613682565b801561220d5780601f106121e45761010080835404028352916020019161220d565b820191905f5260205f20905b8154815290600101906020018083116121f057829003601f168201915b505050505091505090565b61222061114b565b15612257576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106122b5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816122ab576122aa613e6a565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106122f2576d04ee2d6d415b85acef810000000083816122e8576122e7613e6a565b5b0492506020810190505b662386f26fc10000831061232157662386f26fc10000838161231757612316613e6a565b5b0492506010810190505b6305f5e100831061234a576305f5e10083816123405761233f613e6a565b5b0492506008810190505b612710831061236f57612710838161236557612364613e6a565b5b0492506004810190505b60648310612392576064838161238857612387613e6a565b5b0492506002810190505b600a83106123a1576001810190505b80915050919050565b5f6123bc6123b6612747565b83612755565b9050919050565b5f805f6041845103612403575f805f602087015192506040870151915060608701515f1a90506123f588828585612795565b955095509550505050612411565b5f600285515f1b9250925092505b9250925092565b5f600381111561242b5761242a6140e0565b5b82600381111561243e5761243d6140e0565b5b03156125765760016003811115612458576124576140e0565b5b82600381111561246b5761246a6140e0565b5b036124a2576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156124b6576124b56140e0565b5b8260038111156124c9576124c86140e0565b5b0361250d57805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016125049190613632565b60405180910390fd5b6003808111156125205761251f6140e0565b5b826003811115612533576125326140e0565b5b0361257557806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161256c9190613237565b60405180910390fd5b5b5050565b61258261287c565b6125b8576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6125c261257a565b5f6125cb6120b5565b9050828160020190816125de9190614165565b50818160030190816125f09190614165565b505f801b815f01819055505f801b8160010181905550505050565b61261361257a565b5f61261c61201f565b90505f815f015f6101000a81548160ff02191690831515021790555050565b61264361114b565b612679576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f33905090565b5f6126ae7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b61289a565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6126de826128a3565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f8151111561273a57612734828261296c565b50612743565b6127426129ec565b5b5050565b5f612750612a28565b905090565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156127d1575f600385925092509250612872565b5f6001888888886040515f81526020016040526040516127f4949392919061424f565b6020604051602081039080840390855afa158015612814573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612865575f60015f801b93509350935050612872565b805f805f1b935093509350505b9450945094915050565b5f612885611be4565b5f0160089054906101000a900460ff16905090565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b036128fe57806040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016128f591906135c4565b60405180910390fd5b8061292a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b61289a565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516129959190613fa2565b5f60405180830381855af49150503d805f81146129cd576040519150601f19603f3d011682016040523d82523d5f602084013e6129d2565b606091505b50915091506129e2858383612a8b565b9250505092915050565b5f341115612a26576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612a52612b18565b612a5a612b8e565b4630604051602001612a70959493929190614292565b60405160208183030381529060405280519060200120905090565b606082612aa057612a9b82612c05565b612b10565b5f8251148015612ac657505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15612b0857836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401612aff91906135c4565b60405180910390fd5b819050612b11565b5b9392505050565b5f80612b226120b5565b90505f612b2d6120dc565b90505f81511115612b4957808051906020012092505050612b8b565b5f825f015490505f801b8114612b6457809350505050612b8b565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f80612b986120b5565b90505f612ba361217a565b90505f81511115612bbf57808051906020012092505050612c02565b5f826001015490505f801b8114612bdb57809350505050612c02565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f81511115612c175780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b612c6c81612c5a565b8114612c76575f80fd5b50565b5f81359050612c8781612c63565b92915050565b5f60208284031215612ca257612ca1612c52565b5b5f612caf84828501612c79565b91505092915050565b5f8115159050919050565b612ccc81612cb8565b82525050565b5f602082019050612ce55f830184612cc3565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612d22578082015181840152602081019050612d07565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612d4782612ceb565b612d518185612cf5565b9350612d61818560208601612d05565b612d6a81612d2d565b840191505092915050565b5f6020820190508181035f830152612d8d8184612d3d565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612de782612dbe565b9050919050565b612df781612ddd565b82525050565b5f612e088383612dee565b60208301905092915050565b5f602082019050919050565b5f612e2a82612d95565b612e348185612d9f565b9350612e3f83612daf565b805f5b83811015612e6f578151612e568882612dfd565b9750612e6183612e14565b925050600181019050612e42565b5085935050505092915050565b5f6020820190508181035f830152612e948184612e20565b905092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612ebd57612ebc612e9c565b5b8235905067ffffffffffffffff811115612eda57612ed9612ea0565b5b602083019150836020820283011115612ef657612ef5612ea4565b5b9250929050565b5f8083601f840112612f1257612f11612e9c565b5b8235905067ffffffffffffffff811115612f2f57612f2e612ea0565b5b602083019150836001820283011115612f4b57612f4a612ea4565b5b9250929050565b5f805f805f805f6080888a031215612f6d57612f6c612c52565b5b5f612f7a8a828b01612c79565b975050602088013567ffffffffffffffff811115612f9b57612f9a612c56565b5b612fa78a828b01612ea8565b9650965050604088013567ffffffffffffffff811115612fca57612fc9612c56565b5b612fd68a828b01612efd565b9450945050606088013567ffffffffffffffff811115612ff957612ff8612c56565b5b6130058a828b01612efd565b925092505092959891949750929550565b5f805f6040848603121561302d5761302c612c52565b5b5f61303a86828701612c79565b935050602084013567ffffffffffffffff81111561305b5761305a612c56565b5b61306786828701612efd565b92509250509250925092565b61307c81612ddd565b8114613086575f80fd5b50565b5f8135905061309781613073565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6130d782612d2d565b810181811067ffffffffffffffff821117156130f6576130f56130a1565b5b80604052505050565b5f613108612c49565b905061311482826130ce565b919050565b5f67ffffffffffffffff821115613133576131326130a1565b5b61313c82612d2d565b9050602081019050919050565b828183375f83830152505050565b5f61316961316484613119565b6130ff565b9050828152602081018484840111156131855761318461309d565b5b613190848285613149565b509392505050565b5f82601f8301126131ac576131ab612e9c565b5b81356131bc848260208601613157565b91505092915050565b5f80604083850312156131db576131da612c52565b5b5f6131e885828601613089565b925050602083013567ffffffffffffffff81111561320957613208612c56565b5b61321585828601613198565b9150509250929050565b5f819050919050565b6132318161321f565b82525050565b5f60208201905061324a5f830184613228565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b61328481613250565b82525050565b61329381612c5a565b82525050565b6132a281612ddd565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6132da81612c5a565b82525050565b5f6132eb83836132d1565b60208301905092915050565b5f602082019050919050565b5f61330d826132a8565b61331781856132b2565b9350613322836132c2565b805f5b8381101561335257815161333988826132e0565b9750613344836132f7565b925050600181019050613325565b5085935050505092915050565b5f60e0820190506133725f83018a61327b565b81810360208301526133848189612d3d565b905081810360408301526133988188612d3d565b90506133a7606083018761328a565b6133b46080830186613299565b6133c160a0830185613228565b81810360c08301526133d38184613303565b905098975050505050505050565b5f805f805f805f60a0888a0312156133fc576133fb612c52565b5b5f6134098a828b01612c79565b975050602061341a8a828b01613089565b965050604061342b8a828b01613089565b955050606088013567ffffffffffffffff81111561344c5761344b612c56565b5b6134588a828b01612efd565b9450945050608088013567ffffffffffffffff81111561347b5761347a612c56565b5b6134878a828b01612efd565b925092505092959891949750929550565b5f81905092915050565b5f6134ac82612ceb565b6134b68185613498565b93506134c6818560208601612d05565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f613506600283613498565b9150613511826134d2565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f613550600183613498565b915061355b8261351c565b600182019050919050565b5f61357182876134a2565b915061357c826134fa565b915061358882866134a2565b915061359382613544565b915061359f82856134a2565b91506135aa82613544565b91506135b682846134a2565b915081905095945050505050565b5f6020820190506135d75f830184613299565b92915050565b6135e681612cb8565b81146135f0575f80fd5b50565b5f81519050613601816135dd565b92915050565b5f6020828403121561361c5761361b612c52565b5b5f613629848285016135f3565b91505092915050565b5f6020820190506136455f83018461328a565b92915050565b5f82905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061369957607f821691505b6020821081036136ac576136ab613655565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261370e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826136d3565b61371886836136d3565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61375361374e61374984612c5a565b613730565b612c5a565b9050919050565b5f819050919050565b61376c83613739565b6137806137788261375a565b8484546136df565b825550505050565b5f90565b613794613788565b61379f818484613763565b505050565b5b818110156137c2576137b75f8261378c565b6001810190506137a5565b5050565b601f821115613807576137d8816136b2565b6137e1846136c4565b810160208510156137f0578190505b6138046137fc856136c4565b8301826137a4565b50505b505050565b5f82821c905092915050565b5f6138275f198460080261380c565b1980831691505092915050565b5f61383f8383613818565b9150826002028217905092915050565b613859838361364b565b67ffffffffffffffff811115613872576138716130a1565b5b61387c8254613682565b6138878282856137c6565b5f601f8311600181146138b4575f84156138a2578287013590505b6138ac8582613834565b865550613913565b601f1984166138c2866136b2565b5f5b828110156138e9578489013582556001820191506020850194506020810190506138c4565b868310156139065784890135613902601f891682613818565b8355505b6001600288020188555050505b50505050505050565b5f82825260208201905092915050565b5f80fd5b82818337505050565b5f613944838561391c565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156139775761397661392c565b5b602083029250613988838584613930565b82840190509392505050565b5f81549050919050565b5f82825260208201905092915050565b5f819050815f5260205f209050919050565b5f82825260208201905092915050565b5f81546139dc81613682565b6139e681866139c0565b9450600182165f8114613a005760018114613a1657613a48565b60ff198316865281151560200286019350613a48565b613a1f856136b2565b5f5b83811015613a4057815481890152600182019150602081019050613a21565b808801955050505b50505092915050565b5f613a5c83836139d0565b905092915050565b5f600182019050919050565b5f613a7a82613994565b613a84818561399e565b935083602082028501613a96856139ae565b805f5b85811015613ad057848403895281613ab18582613a51565b9450613abc83613a64565b925060208a01995050600181019050613a99565b50829750879550505050505092915050565b5f6040820190508181035f830152613afb818587613939565b90508181036020830152613b0f8184613a70565b9050949350505050565b5f80fd5b5f80fd5b5f81519050613b2f81613073565b92915050565b5f67ffffffffffffffff821115613b4f57613b4e6130a1565b5b613b5882612d2d565b9050602081019050919050565b5f613b77613b7284613b35565b6130ff565b905082815260208101848484011115613b9357613b9261309d565b5b613b9e848285612d05565b509392505050565b5f82601f830112613bba57613bb9612e9c565b5b8151613bca848260208601613b65565b91505092915050565b5f60608284031215613be857613be7613b19565b5b613bf260606130ff565b90505f613c0184828501613b21565b5f830152506020613c1484828501613b21565b602083015250604082015167ffffffffffffffff811115613c3857613c37613b1d565b5b613c4484828501613ba6565b60408301525092915050565b5f60208284031215613c6557613c64612c52565b5b5f82015167ffffffffffffffff811115613c8257613c81612c56565b5b613c8e84828501613bd3565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613cce82612c5a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d0057613cff613c97565b5b600182019050919050565b5f67ffffffffffffffff82169050919050565b613d2781613d0b565b82525050565b5f602082019050613d405f830184613d1e565b92915050565b5f60208284031215613d5b57613d5a612c52565b5b5f613d6884828501613b21565b91505092915050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f613da5601583612cf5565b9150613db082613d71565b602082019050919050565b5f6020820190508181035f830152613dd281613d99565b9050919050565b5f82825260208201905092915050565b5f613df48385613dd9565b9350613e01838584613149565b613e0a83612d2d565b840190509392505050565b5f608082019050613e285f830189613299565b613e356020830188613299565b8181036040830152613e48818688613de9565b90508181036060830152613e5d818486613de9565b9050979650505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f81519050919050565b5f81905092915050565b5f819050602082019050919050565b613ec38161321f565b82525050565b5f613ed48383613eba565b60208301905092915050565b5f602082019050919050565b5f613ef682613e97565b613f008185613ea1565b9350613f0b83613eab565b805f5b83811015613f3b578151613f228882613ec9565b9750613f2d83613ee0565b925050600181019050613f0e565b5085935050505092915050565b5f613f538284613eec565b915081905092915050565b5f81519050919050565b5f81905092915050565b5f613f7c82613f5e565b613f868185613f68565b9350613f96818560208601612d05565b80840191505092915050565b5f613fad8284613f72565b915081905092915050565b5f60c082019050613fcb5f830189613228565b613fd86020830188613228565b613fe56040830187613299565b613ff26060830186613299565b613fff608083018561328a565b61400c60a0830184613228565b979650505050505050565b5f60608201905061402a5f83018661328a565b6140376020830185613299565b6140446040830184613299565b949350505050565b5f8151905061405a81612c63565b92915050565b5f6020828403121561407557614074612c52565b5b5f6140828482850161404c565b91505092915050565b6140948161321f565b811461409e575f80fd5b50565b5f815190506140af8161408b565b92915050565b5f602082840312156140ca576140c9612c52565b5b5f6140d7848285016140a1565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f819050815f5260205f209050919050565b601f821115614160576141318161410d565b61413a846136c4565b81016020851015614149578190505b61415d614155856136c4565b8301826137a4565b50505b505050565b61416e82612ceb565b67ffffffffffffffff811115614187576141866130a1565b5b6141918254613682565b61419c82828561411f565b5f60209050601f8311600181146141cd575f84156141bb578287015190505b6141c58582613834565b86555061422c565b601f1984166141db8661410d565b5f5b82811015614202578489015182556001820191506020850194506020810190506141dd565b8683101561421f578489015161421b601f891682613818565b8355505b6001600288020188555050505b505050505050565b5f60ff82169050919050565b61424981614234565b82525050565b5f6080820190506142625f830187613228565b61426f6020830186614240565b61427c6040830185613228565b6142896060830184613228565b95945050505050565b5f60a0820190506142a55f830188613228565b6142b26020830187613228565b6142bf6040830186613228565b6142cc606083018561328a565b6142d96080830184613299565b969550505050505056fe43697068657274657874566572696669636174696f6e28627974657333325b5d20637448616e646c65732c616464726573732075736572416464726573732c6164647265737320636f6e7472616374416464726573732c75696e7432353620636f6e7472616374436861696e49642c62797465732065787472614461746129 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\xA0`@R0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RP4\x80\x15b\0\0CW_\x80\xFD[Pb\0\0Tb\0\0Z` \x1B` \x1CV[b\0\x01\xC4V[_b\0\0kb\0\x01^` \x1B` \x1CV[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15b\0\0\xB6W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14b\0\x01[Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Qb\0\x01R\x91\x90b\0\x01\xA9V[`@Q\x80\x91\x03\x90\xA1[PV[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[b\0\x01\xA3\x81b\0\x01\x85V[\x82RPPV[_` \x82\x01\x90Pb\0\x01\xBE_\x83\x01\x84b\0\x01\x98V[\x92\x91PPV[`\x80QaCJb\0\x01\xEB_9_\x81\x81a\x1C\x8A\x01R\x81\x81a\x1C\xDF\x01Ra\x1F\x81\x01RaCJ_\xF3\xFE`\x80`@R`\x046\x10a\0\xF2W_5`\xE0\x1C\x80cR\xD1\x90-\x11a\0\x89W\x80c\xA7\0I\x96\x11a\0XW\x80c\xA7\0I\x96\x14a\x02\xCAW\x80c\xAD<\xB1\xCC\x14a\x02\xF2W\x80c\xCE~BW\x14a\x03\x1CW\x80c\xE9o\x88\xEA\x14a\x03XWa\0\xF2V[\x80cR\xD1\x90-\x14a\x020W\x80c\\\x97Z\xBB\x14a\x02ZW\x80c\x84V\xCBY\x14a\x02\x84W\x80c\x84\xB0\x19n\x14a\x02\x9AWa\0\xF2V[\x80c3\x80\x07\xFC\x11a\0\xC5W\x80c3\x80\x07\xFC\x14a\x01\xC0W\x80c9\xF78\x10\x14a\x01\xE8W\x80c?K\xA8:\x14a\x01\xFEW\x80cO\x1E\xF2\x86\x14a\x02\x14Wa\0\xF2V[\x80c\x0CaX9\x14a\0\xF6W\x80c\r\x8En,\x14a\x012W\x80c\x1B\xBE\x9F\xAE\x14a\x01\\W\x80c1\xBE\xDE\xA3\x14a\x01\x98W[_\x80\xFD[4\x80\x15a\x01\x01W_\x80\xFD[Pa\x01\x1C`\x04\x806\x03\x81\x01\x90a\x01\x17\x91\x90a,tV[a\x03\x94V[`@Qa\x01)\x91\x90a,\xB9V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01=W_\x80\xFD[Pa\x01Fa\x03\xC8V[`@Qa\x01S\x91\x90a-\\V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01gW_\x80\xFD[Pa\x01\x82`\x04\x806\x03\x81\x01\x90a\x01}\x91\x90a,tV[a\x04CV[`@Qa\x01\x8F\x91\x90a.cV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xA3W_\x80\xFD[Pa\x01\xBE`\x04\x806\x03\x81\x01\x90a\x01\xB9\x91\x90a/9V[a\x04\xEDV[\0[4\x80\x15a\x01\xCBW_\x80\xFD[Pa\x01\xE6`\x04\x806\x03\x81\x01\x90a\x01\xE1\x91\x90a/\xFDV[a\nNV[\0[4\x80\x15a\x01\xF3W_\x80\xFD[Pa\x01\xFCa\r\xC7V[\0[4\x80\x15a\x02\tW_\x80\xFD[Pa\x02\x12a\x0F\xB3V[\0[a\x02.`\x04\x806\x03\x81\x01\x90a\x02)\x91\x90a1\xACV[a\x10\xFBV[\0[4\x80\x15a\x02;W_\x80\xFD[Pa\x02Da\x11\x1AV[`@Qa\x02Q\x91\x90a2\x1EV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02eW_\x80\xFD[Pa\x02na\x11KV[`@Qa\x02{\x91\x90a,\xB9V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\x8FW_\x80\xFD[Pa\x02\x98a\x11mV[\0[4\x80\x15a\x02\xA5W_\x80\xFD[Pa\x02\xAEa\x12\x92V[`@Qa\x02\xC1\x97\x96\x95\x94\x93\x92\x91\x90a3FV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\xD5W_\x80\xFD[Pa\x02\xF0`\x04\x806\x03\x81\x01\x90a\x02\xEB\x91\x90a3\xC8V[a\x13\x9BV[\0[4\x80\x15a\x02\xFDW_\x80\xFD[Pa\x03\x06a\x15\xDBV[`@Qa\x03\x13\x91\x90a-\\V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03'W_\x80\xFD[Pa\x03B`\x04\x806\x03\x81\x01\x90a\x03=\x91\x90a,tV[a\x16\x14V[`@Qa\x03O\x91\x90a.cV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03cW_\x80\xFD[Pa\x03~`\x04\x806\x03\x81\x01\x90a\x03y\x91\x90a,tV[a\x16\xE5V[`@Qa\x03\x8B\x91\x90a,\xB9V[`@Q\x80\x91\x03\x90\xF3[_\x80a\x03\x9Ea\x17\x19V[\x90P\x80`\x07\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[```@Q\x80`@\x01`@R\x80`\x11\x81R` \x01\x7FInputVerification\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RPa\x04\t_a\x17@V[a\x04\x13`\x01a\x17@V[a\x04\x1C_a\x17@V[`@Q` \x01a\x04/\x94\x93\x92\x91\x90a5MV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x90V[``_a\x04Na\x17\x19V[\x90P\x80`\n\x01_\x84\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x04\xE0W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x04\x97W[PPPPP\x91PP\x91\x90PV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x05:\x91\x90a5\xABV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05UW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05y\x91\x90a5\xEEV[a\x05\xBAW3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x05\xB1\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[_a\x05\xC3a\x17\x19V[\x90P\x80_\x01T\x88\x11\x80a\x05\xD5WP_\x88\x14[\x15a\x06\x17W\x87`@Q\x7FG\x11\x08?\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\x81R`\x04\x01a\x06\x0E\x91\x90a6\x19V[`@Q\x80\x91\x03\x90\xFD[_\x81`\x01\x01_\x8A\x81R` \x01\x90\x81R` \x01_ `@Q\x80``\x01`@R\x90\x81_\x82\x01T\x81R` \x01`\x01\x82\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01`\x02\x82\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RPP\x90P_`@Q\x80`\xA0\x01`@R\x80\x8A\x8A\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x83`@\x01Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x83` \x01Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x83_\x01Q\x81R` \x01\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90P_a\x07\xD9\x82a\x18\nV[\x90P_a\x08)\x82\x8A\x8A\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa\x18\xC9V[\x90Pa\x084\x81a\x18\xF3V[a\x08?\x8C3\x83a\x19\xC3V[_\x85`\x02\x01_\x8E\x81R` \x01\x90\x81R` \x01_ _\x84\x81R` \x01\x90\x81R` \x01_ \x90P\x80\x8A\x8A\x90\x91\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x92\x90\x91\x92\x90\x91\x92\x90\x91\x92P\x91\x82a\x08\x9D\x92\x91\x90a86V[P`\x01\x86`\x05\x01_\x8F\x81R` \x01\x90\x81R` \x01_ _\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x85`\x03\x01_\x8E\x81R` \x01\x90\x81R` \x01_ _\x84\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x85`\x04\x01_\x8E\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\t\xBAWPa\t\xB9\x81\x80T\x90Pa\x1B\x16V[[\x15a\n?W`\x01\x86`\x04\x01_\x8F\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x82\x86`\x06\x01_\x8F\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x8C\x7F\xFE,CXW\x86\xA5\xA6X\xD2\xEC]\xF5\xDE\xA3\xFB3\x85\xB7|\x94\xF6\x0FrO\xF8\x10\x89oA\x985\x8D\x8D\x84`@Qa\n6\x93\x92\x91\x90a:\xC9V[`@Q\x80\x91\x03\x90\xA2[PPPPPPPPPPPPPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\n\x9B\x91\x90a5\xABV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\n\xB6W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xDA\x91\x90a5\xEEV[a\x0B\x1BW3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x0B\x12\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[_a\x0B$a\x17\x19V[\x90P\x80_\x01T\x84\x11\x80a\x0B6WP_\x84\x14[\x15a\x0BxW\x83`@Q\x7FG\x11\x08?\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\x81R`\x04\x01a\x0Bo\x91\x90a6\x19V[`@Q\x80\x91\x03\x90\xFD[_s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xEFi\x97\xF93`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0B\xC6\x91\x90a5\xABV[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0B\xE0W=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0C\x08\x91\x90a<7V[\x90P_\x81` \x01Q\x90Pa\x0C\x1D\x863\x83a\x19\xC3V[\x82`\x08\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x81T\x80\x92\x91\x90a\x0C@\x90a<\xABV[\x91\x90PUP`\x01\x83`\t\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x82`\n\x01_\x87\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x82`\x07\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\raWPa\r`\x83`\x08\x01_\x88\x81R` \x01\x90\x81R` \x01_ Ta\x1B\x16V[[\x15a\r\xBFW`\x01\x83`\x07\x01_\x88\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x85\x7F\xE4e\xE1A\xFA\x8A\xBD\x95\xAB~\x08UT3\x07\xF8Pj\xB0\x17\x0E\xF6dB\x0F\xB7\x1A\xB7\xDE\x01\x83\xDE`@Q`@Q\x80\x91\x03\x90\xA2[PPPPPPV[`\x01a\r\xD1a\x1B\xA7V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x0E\x12W`@Q\x7FoOs\x1F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02_a\x0E\x1Da\x1B\xCBV[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x80a\x0EeWP\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x15[\x15a\x0E\x9CW`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`\x01\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPa\x0FU`@Q\x80`@\x01`@R\x80`\x11\x81R` \x01\x7FInputVerification\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RP`@Q\x80`@\x01`@R\x80`\x01\x81R` \x01\x7F1\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\x81RPa\x1B\xF2V[a\x0F]a\x1C\x08V[_\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x82`@Qa\x0F\xA7\x91\x90a=\x14V[`@Q\x80\x91\x03\x90\xA1PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x10\x10W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x104\x91\x90a=-V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15\x80\x15a\x10\xAFWPs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x10\xF1W3`@Q\x7F\xE1\x91f\xEE\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\x81R`\x04\x01a\x10\xE8\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[a\x10\xF9a\x1C\x1AV[V[a\x11\x03a\x1C\x88V[a\x11\x0C\x82a\x1DnV[a\x11\x16\x82\x82a\x1EaV[PPV[_a\x11#a\x1F\x7FV[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[_\x80a\x11Ua \x06V[\x90P\x80_\x01_\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x90V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cF\xFB\xF6\x8E3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x11\xBA\x91\x90a5\xABV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11\xD5W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11\xF9\x91\x90a5\xEEV[\x15\x80\x15a\x12FWPs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x12\x88W3`@Q\x7F8\x89\x16\xBB\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\x81R`\x04\x01a\x12\x7F\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[a\x12\x90a -V[V[_``\x80_\x80_``_a\x12\xA4a \x9CV[\x90P_\x80\x1B\x81_\x01T\x14\x80\x15a\x12\xBFWP_\x80\x1B\x81`\x01\x01T\x14[a\x12\xFEW`@Q\x7F\x08\xC3y\xA0\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\x81R`\x04\x01a\x12\xF5\x90a=\xA2V[`@Q\x80\x91\x03\x90\xFD[a\x13\x06a \xC3V[a\x13\x0Ea!aV[F0_\x80\x1B_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x13-Wa\x13,a0\x88V[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x13[W\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x7F\x0F\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\x95\x94\x93\x92\x91\x90\x97P\x97P\x97P\x97P\x97P\x97P\x97PP\x90\x91\x92\x93\x94\x95\x96V[\x86s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xBF\xF3\xAA\xBA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\xE9\x91\x90a6\x19V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x14\x04W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x14(\x91\x90a5\xEEV[a\x14iW\x80`@Q\x7F\xB6g\x9C;\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\x81R`\x04\x01a\x14`\x91\x90a6\x19V[`@Q\x80\x91\x03\x90\xFD[a\x14qa!\xFFV[_a\x14za\x17\x19V[\x90P\x80_\x01_\x81T\x80\x92\x91\x90a\x14\x8F\x90a<\xABV[\x91\x90PUP_\x81_\x01T\x90P`@Q\x80``\x01`@R\x80\x8B\x81R` \x01\x8As\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x89s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RP\x82`\x01\x01_\x83\x81R` \x01\x90\x81R` \x01_ _\x82\x01Q\x81_\x01U` \x82\x01Q\x81`\x01\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`@\x82\x01Q\x81`\x02\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x90PP\x89\x81\x7FJ\xE5Ojn\x90\r\x80o\xFA[\xB4n\xD9\x14YR=/j\xC9\xB5\xD6$\x04\xFE\xAB\x88v\x86\xD0\x05\x8B\x8B\x8B\x8B\x8B\x8B`@Qa\x15\xC7\x96\x95\x94\x93\x92\x91\x90a=\xFCV[`@Q\x80\x91\x03\x90\xA3PPPPPPPPPPV[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[``_a\x16\x1Fa\x17\x19V[\x90P_\x81`\x06\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x03\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x82\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x16\xD7W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x16\x8EW[PPPPP\x92PPP\x91\x90PV[_\x80a\x16\xEFa\x17\x19V[\x90P\x80`\x04\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[_\x7FED\x16\\\xE1e2d\xFD\xCB\t\xB0)\x89\x1E=L\x8D\x85\x83Hh!\x17/\x88.\x19\xA1I\xA8\0\x90P\x90V[``_`\x01a\x17N\x84a\"@V[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17lWa\x17ka0\x88V[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x17\x9EW\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a\x17\xFFW\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a\x17\xF4Wa\x17\xF3a>QV[[\x04\x94P_\x85\x03a\x17\xABW[\x81\x93PPPP\x91\x90PV[_a\x18\xC2`@Q\x80`\xA0\x01`@R\x80`\x7F\x81R` \x01aB\xCB`\x7F\x919\x80Q\x90` \x01 \x83_\x01Q`@Q` \x01a\x18B\x91\x90a?/V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x84` \x01Q\x85`@\x01Q\x86``\x01Q\x87`\x80\x01Q`@Q` \x01a\x18|\x91\x90a?\x89V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a\x18\xA7\x96\x95\x94\x93\x92\x91\x90a?\x9FV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a#\x91V[\x90P\x91\x90PV[_\x80_\x80a\x18\xD7\x86\x86a#\xAAV[\x92P\x92P\x92Pa\x18\xE7\x82\x82a#\xFFV[\x82\x93PPPP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c+\x10\x1C\x03\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x19@\x91\x90a5\xABV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x19[W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x19\x7F\x91\x90a5\xEEV[a\x19\xC0W\x80`@Q\x7F&\xCDu\xDC\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\x81R`\x04\x01a\x19\xB7\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[PV[_a\x19\xCCa\x17\x19V[\x90P\x80`\x05\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x1AoW\x83\x83\x83`@Q\x7F\xF9\xEDC\x1F\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\x81R`\x04\x01a\x1Af\x93\x92\x91\x90a?\xFEV[`@Q\x80\x91\x03\x90\xFD[\x80`\t\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x1B\x10W\x83\x83\x83`@Q\x7F/\xA71t\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\x81R`\x04\x01a\x1B\x07\x93\x92\x91\x90a?\xFEV[`@Q\x80\x91\x03\x90\xFD[PPPPV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cg\x99\xEFR`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1BuW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1B\x99\x91\x90a@GV[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[_a\x1B\xB0a\x1B\xCBV[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[a\x1B\xFAa%aV[a\x1C\x04\x82\x82a%\xA1V[PPV[a\x1C\x10a%aV[a\x1C\x18a%\xF2V[V[a\x1C\"a&\"V[_a\x1C+a \x06V[\x90P_\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F]\xB9\xEE\nI[\xF2\xE6\xFF\x9C\x91\xA7\x83L\x1B\xA4\xFD\xD2D\xA5\xE8\xAANS{\xD3\x8A\xEA\xE4\xB0s\xAAa\x1Cpa&bV[`@Qa\x1C}\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xA1PV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a\x1D5WP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x1D\x1Ca&iV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x1DlW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1D\xCBW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1D\xEF\x91\x90a=-V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x1E^W3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\x1EU\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a\x1E\xC9WP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1E\xC6\x91\x90a@\x9CV[`\x01[a\x1F\nW\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x1F\x01\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a\x1FpW\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a\x1Fg\x91\x90a2\x1EV[`@Q\x80\x91\x03\x90\xFD[a\x1Fz\x83\x83a&\xBCV[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a \x04W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x7F\xCD^\xD1\\n\x18~w\xE9\xAE\xE8\x81\x84\xC2\x1FO!\x82\xABX'\xCB;~\x07\xFB\xED\xCDc\xF03\0\x90P\x90V[a 5a!\xFFV[_a >a \x06V[\x90P`\x01\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7Fb\xE7\x8C\xEA\x01\xBE\xE3 \xCDNB\x02p\xB5\xEAt\0\r\x11\xB0\xC9\xF7GT\xEB\xDB\xFCTK\x05\xA2Xa \x84a&bV[`@Qa \x91\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xA1PV[_\x7F\xA1jF\xD9Ba\xC7Q|\xC8\xFF\x89\xF6\x1C\x0C\xE95\x98\xE3\xC8I\x80\x10\x11\xDE\xE6I\xA6\xA5W\xD1\0\x90P\x90V[``_a \xCEa \x9CV[\x90P\x80`\x02\x01\x80Ta \xDF\x90a6iV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta!\x0B\x90a6iV[\x80\x15a!VW\x80`\x1F\x10a!-Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a!VV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a!9W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[``_a!la \x9CV[\x90P\x80`\x03\x01\x80Ta!}\x90a6iV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta!\xA9\x90a6iV[\x80\x15a!\xF4W\x80`\x1F\x10a!\xCBWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a!\xF4V[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a!\xD7W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[a\"\x07a\x11KV[\x15a\">W`@Q\x7F\xD9<\x06e\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a\"\x9CWz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a\"\x92Wa\"\x91a>QV[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\"\xD9Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a\"\xCFWa\"\xCEa>QV[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a#\x08Wf#\x86\xF2o\xC1\0\0\x83\x81a\"\xFEWa\"\xFDa>QV[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a#1Wc\x05\xF5\xE1\0\x83\x81a#'Wa#&a>QV[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a#VWa'\x10\x83\x81a#LWa#Ka>QV[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a#yW`d\x83\x81a#oWa#na>QV[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a#\x88W`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[_a#\xA3a#\x9Da'.V[\x83a'a@\xC7V[[\x82`\x03\x81\x11\x15a$RWa$Qa@\xC7V[[\x03a$\x89W`@Q\x7F\xF6E\xEE\xDF\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02`\x03\x81\x11\x15a$\x9DWa$\x9Ca@\xC7V[[\x82`\x03\x81\x11\x15a$\xB0Wa$\xAFa@\xC7V[[\x03a$\xF4W\x80_\x1C`@Q\x7F\xFC\xE6\x98\xF7\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\x81R`\x04\x01a$\xEB\x91\x90a6\x19V[`@Q\x80\x91\x03\x90\xFD[`\x03\x80\x81\x11\x15a%\x07Wa%\x06a@\xC7V[[\x82`\x03\x81\x11\x15a%\x1AWa%\x19a@\xC7V[[\x03a%\\W\x80`@Q\x7F\xD7\x8B\xCE\x0C\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\x81R`\x04\x01a%S\x91\x90a2\x1EV[`@Q\x80\x91\x03\x90\xFD[[PPV[a%ia(cV[a%\x9FW`@Q\x7F\xD7\xE6\xBC\xF8\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[a%\xA9a%aV[_a%\xB2a \x9CV[\x90P\x82\x81`\x02\x01\x90\x81a%\xC5\x91\x90aALV[P\x81\x81`\x03\x01\x90\x81a%\xD7\x91\x90aALV[P_\x80\x1B\x81_\x01\x81\x90UP_\x80\x1B\x81`\x01\x01\x81\x90UPPPPV[a%\xFAa%aV[_a&\x03a \x06V[\x90P_\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPPV[a&*a\x11KV[a&`W`@Q\x7F\x8D\xFC +\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_3\x90P\x90V[_a&\x95\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba(\x81V[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a&\xC5\x82a(\x8AV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a'!Wa'\x1B\x82\x82a)SV[Pa'*V[a')a)\xD3V[[PPV[_a'7a*\x0FV[\x90P\x90V[_`@Q\x7F\x19\x01\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\x81R\x83`\x02\x82\x01R\x82`\"\x82\x01R`B\x81 \x91PP\x92\x91PPV[_\x80_\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF]WnsW\xA4P\x1D\xDF\xE9/Fh\x1B \xA0\x84_\x1C\x11\x15a'\xB8W_`\x03\x85\x92P\x92P\x92Pa(YV[_`\x01\x88\x88\x88\x88`@Q_\x81R` \x01`@R`@Qa'\xDB\x94\x93\x92\x91\x90aB6V[` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a'\xFBW=_\x80>=_\xFD[PPP` `@Q\x03Q\x90P_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x03a(LW_`\x01_\x80\x1B\x93P\x93P\x93PPa(YV[\x80_\x80_\x1B\x93P\x93P\x93PP[\x94P\x94P\x94\x91PPV[_a(la\x1B\xCBV[_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x90P\x90V[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a(\xE5W\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a(\xDC\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[\x80a)\x11\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba(\x81V[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa)|\x91\x90a?\x89V[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a)\xB4W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a)\xB9V[``\x91P[P\x91P\x91Pa)\xC9\x85\x83\x83a*rV[\x92PPP\x92\x91PPV[_4\x11\x15a*\rW`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0Fa*9a*\xFFV[a*Aa+uV[F0`@Q` \x01a*W\x95\x94\x93\x92\x91\x90aByV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x90V[``\x82a*\x87Wa*\x82\x82a+\xECV[a*\xF7V[_\x82Q\x14\x80\x15a*\xADWP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a*\xEFW\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a*\xE6\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa*\xF8V[[\x93\x92PPPV[_\x80a+\ta \x9CV[\x90P_a+\x14a \xC3V[\x90P_\x81Q\x11\x15a+0W\x80\x80Q\x90` \x01 \x92PPPa+rV[_\x82_\x01T\x90P_\x80\x1B\x81\x14a+KW\x80\x93PPPPa+rV[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x80a+\x7Fa \x9CV[\x90P_a+\x8Aa!aV[\x90P_\x81Q\x11\x15a+\xA6W\x80\x80Q\x90` \x01 \x92PPPa+\xE9V[_\x82`\x01\x01T\x90P_\x80\x1B\x81\x14a+\xC2W\x80\x93PPPPa+\xE9V[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x81Q\x11\x15a+\xFEW\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[a,S\x81a,AV[\x81\x14a,]W_\x80\xFD[PV[_\x815\x90Pa,n\x81a,JV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a,\x89Wa,\x88a,9V[[_a,\x96\x84\x82\x85\x01a,`V[\x91PP\x92\x91PPV[_\x81\x15\x15\x90P\x91\x90PV[a,\xB3\x81a,\x9FV[\x82RPPV[_` \x82\x01\x90Pa,\xCC_\x83\x01\x84a,\xAAV[\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15a-\tW\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa,\xEEV[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a-.\x82a,\xD2V[a-8\x81\x85a,\xDCV[\x93Pa-H\x81\x85` \x86\x01a,\xECV[a-Q\x81a-\x14V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra-t\x81\x84a-$V[\x90P\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a-\xCE\x82a-\xA5V[\x90P\x91\x90PV[a-\xDE\x81a-\xC4V[\x82RPPV[_a-\xEF\x83\x83a-\xD5V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a.\x11\x82a-|V[a.\x1B\x81\x85a-\x86V[\x93Pa.&\x83a-\x96V[\x80_[\x83\x81\x10\x15a.VW\x81Qa.=\x88\x82a-\xE4V[\x97Pa.H\x83a-\xFBV[\x92PP`\x01\x81\x01\x90Pa.)V[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra.{\x81\x84a.\x07V[\x90P\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12a.\xA4Wa.\xA3a.\x83V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a.\xC1Wa.\xC0a.\x87V[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15a.\xDDWa.\xDCa.\x8BV[[\x92P\x92\x90PV[_\x80\x83`\x1F\x84\x01\x12a.\xF9Wa.\xF8a.\x83V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a/\x16Wa/\x15a.\x87V[[` \x83\x01\x91P\x83`\x01\x82\x02\x83\x01\x11\x15a/2Wa/1a.\x8BV[[\x92P\x92\x90PV[_\x80_\x80_\x80_`\x80\x88\x8A\x03\x12\x15a/TWa/Sa,9V[[_a/a\x8A\x82\x8B\x01a,`V[\x97PP` \x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a/\x82Wa/\x81a,=V[[a/\x8E\x8A\x82\x8B\x01a.\x8FV[\x96P\x96PP`@\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a/\xB1Wa/\xB0a,=V[[a/\xBD\x8A\x82\x8B\x01a.\xE4V[\x94P\x94PP``\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a/\xE0Wa/\xDFa,=V[[a/\xEC\x8A\x82\x8B\x01a.\xE4V[\x92P\x92PP\x92\x95\x98\x91\x94\x97P\x92\x95PV[_\x80_`@\x84\x86\x03\x12\x15a0\x14Wa0\x13a,9V[[_a0!\x86\x82\x87\x01a,`V[\x93PP` \x84\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a0BWa0Aa,=V[[a0N\x86\x82\x87\x01a.\xE4V[\x92P\x92PP\x92P\x92P\x92V[a0c\x81a-\xC4V[\x81\x14a0mW_\x80\xFD[PV[_\x815\x90Pa0~\x81a0ZV[\x92\x91PPV[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[a0\xBE\x82a-\x14V[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a0\xDDWa0\xDCa0\x88V[[\x80`@RPPPV[_a0\xEFa,0V[\x90Pa0\xFB\x82\x82a0\xB5V[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a1\x1AWa1\x19a0\x88V[[a1#\x82a-\x14V[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_a1Pa1K\x84a1\0V[a0\xE6V[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15a1lWa1ka0\x84V[[a1w\x84\x82\x85a10V[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12a1\x93Wa1\x92a.\x83V[[\x815a1\xA3\x84\x82` \x86\x01a1>V[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a1\xC2Wa1\xC1a,9V[[_a1\xCF\x85\x82\x86\x01a0pV[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a1\xF0Wa1\xEFa,=V[[a1\xFC\x85\x82\x86\x01a1\x7FV[\x91PP\x92P\x92\x90PV[_\x81\x90P\x91\x90PV[a2\x18\x81a2\x06V[\x82RPPV[_` \x82\x01\x90Pa21_\x83\x01\x84a2\x0FV[\x92\x91PPV[_\x7F\xFF\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\x82\x16\x90P\x91\x90PV[a2k\x81a27V[\x82RPPV[a2z\x81a,AV[\x82RPPV[a2\x89\x81a-\xC4V[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a2\xC1\x81a,AV[\x82RPPV[_a2\xD2\x83\x83a2\xB8V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a2\xF4\x82a2\x8FV[a2\xFE\x81\x85a2\x99V[\x93Pa3\t\x83a2\xA9V[\x80_[\x83\x81\x10\x15a39W\x81Qa3 \x88\x82a2\xC7V[\x97Pa3+\x83a2\xDEV[\x92PP`\x01\x81\x01\x90Pa3\x0CV[P\x85\x93PPPP\x92\x91PPV[_`\xE0\x82\x01\x90Pa3Y_\x83\x01\x8Aa2bV[\x81\x81\x03` \x83\x01Ra3k\x81\x89a-$V[\x90P\x81\x81\x03`@\x83\x01Ra3\x7F\x81\x88a-$V[\x90Pa3\x8E``\x83\x01\x87a2qV[a3\x9B`\x80\x83\x01\x86a2\x80V[a3\xA8`\xA0\x83\x01\x85a2\x0FV[\x81\x81\x03`\xC0\x83\x01Ra3\xBA\x81\x84a2\xEAV[\x90P\x98\x97PPPPPPPPV[_\x80_\x80_\x80_`\xA0\x88\x8A\x03\x12\x15a3\xE3Wa3\xE2a,9V[[_a3\xF0\x8A\x82\x8B\x01a,`V[\x97PP` a4\x01\x8A\x82\x8B\x01a0pV[\x96PP`@a4\x12\x8A\x82\x8B\x01a0pV[\x95PP``\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a43Wa42a,=V[[a4?\x8A\x82\x8B\x01a.\xE4V[\x94P\x94PP`\x80\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a4bWa4aa,=V[[a4n\x8A\x82\x8B\x01a.\xE4V[\x92P\x92PP\x92\x95\x98\x91\x94\x97P\x92\x95PV[_\x81\x90P\x92\x91PPV[_a4\x93\x82a,\xD2V[a4\x9D\x81\x85a4\x7FV[\x93Pa4\xAD\x81\x85` \x86\x01a,\xECV[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_a4\xED`\x02\x83a4\x7FV[\x91Pa4\xF8\x82a4\xB9V[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_a57`\x01\x83a4\x7FV[\x91Pa5B\x82a5\x03V[`\x01\x82\x01\x90P\x91\x90PV[_a5X\x82\x87a4\x89V[\x91Pa5c\x82a4\xE1V[\x91Pa5o\x82\x86a4\x89V[\x91Pa5z\x82a5+V[\x91Pa5\x86\x82\x85a4\x89V[\x91Pa5\x91\x82a5+V[\x91Pa5\x9D\x82\x84a4\x89V[\x91P\x81\x90P\x95\x94PPPPPV[_` \x82\x01\x90Pa5\xBE_\x83\x01\x84a2\x80V[\x92\x91PPV[a5\xCD\x81a,\x9FV[\x81\x14a5\xD7W_\x80\xFD[PV[_\x81Q\x90Pa5\xE8\x81a5\xC4V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a6\x03Wa6\x02a,9V[[_a6\x10\x84\x82\x85\x01a5\xDAV[\x91PP\x92\x91PPV[_` \x82\x01\x90Pa6,_\x83\x01\x84a2qV[\x92\x91PPV[_\x82\x90P\x92\x91PPV[\x7FNH{q\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_R`\"`\x04R`$_\xFD[_`\x02\x82\x04\x90P`\x01\x82\x16\x80a6\x80W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a6\x93Wa6\x92a6#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[b\0\x01\xA3\x81b\0\x01\x85V[\x82RPPV[_` \x82\x01\x90Pb\0\x01\xBE_\x83\x01\x84b\0\x01\x98V[\x92\x91PPV[`\x80QaCcb\0\x01\xEB_9_\x81\x81a\x1C\xA3\x01R\x81\x81a\x1C\xF8\x01Ra\x1F\x9A\x01RaCc_\xF3\xFE`\x80`@R`\x046\x10a\0\xF2W_5`\xE0\x1C\x80cR\xD1\x90-\x11a\0\x89W\x80c\xA7\0I\x96\x11a\0XW\x80c\xA7\0I\x96\x14a\x02\xCAW\x80c\xAD<\xB1\xCC\x14a\x02\xF2W\x80c\xCE~BW\x14a\x03\x1CW\x80c\xE9o\x88\xEA\x14a\x03XWa\0\xF2V[\x80cR\xD1\x90-\x14a\x020W\x80c\\\x97Z\xBB\x14a\x02ZW\x80c\x84V\xCBY\x14a\x02\x84W\x80c\x84\xB0\x19n\x14a\x02\x9AWa\0\xF2V[\x80c3\x80\x07\xFC\x11a\0\xC5W\x80c3\x80\x07\xFC\x14a\x01\xC0W\x80c9\xF78\x10\x14a\x01\xE8W\x80c?K\xA8:\x14a\x01\xFEW\x80cO\x1E\xF2\x86\x14a\x02\x14Wa\0\xF2V[\x80c\x0CaX9\x14a\0\xF6W\x80c\r\x8En,\x14a\x012W\x80c\x1B\xBE\x9F\xAE\x14a\x01\\W\x80c1\xBE\xDE\xA3\x14a\x01\x98W[_\x80\xFD[4\x80\x15a\x01\x01W_\x80\xFD[Pa\x01\x1C`\x04\x806\x03\x81\x01\x90a\x01\x17\x91\x90a,\x8DV[a\x03\x94V[`@Qa\x01)\x91\x90a,\xD2V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01=W_\x80\xFD[Pa\x01Fa\x03\xC8V[`@Qa\x01S\x91\x90a-uV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01gW_\x80\xFD[Pa\x01\x82`\x04\x806\x03\x81\x01\x90a\x01}\x91\x90a,\x8DV[a\x04CV[`@Qa\x01\x8F\x91\x90a.|V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xA3W_\x80\xFD[Pa\x01\xBE`\x04\x806\x03\x81\x01\x90a\x01\xB9\x91\x90a/RV[a\x04\xEDV[\0[4\x80\x15a\x01\xCBW_\x80\xFD[Pa\x01\xE6`\x04\x806\x03\x81\x01\x90a\x01\xE1\x91\x90a0\x16V[a\nNV[\0[4\x80\x15a\x01\xF3W_\x80\xFD[Pa\x01\xFCa\r\xC7V[\0[4\x80\x15a\x02\tW_\x80\xFD[Pa\x02\x12a\x0F\xB3V[\0[a\x02.`\x04\x806\x03\x81\x01\x90a\x02)\x91\x90a1\xC5V[a\x10\xFBV[\0[4\x80\x15a\x02;W_\x80\xFD[Pa\x02Da\x11\x1AV[`@Qa\x02Q\x91\x90a27V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02eW_\x80\xFD[Pa\x02na\x11KV[`@Qa\x02{\x91\x90a,\xD2V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\x8FW_\x80\xFD[Pa\x02\x98a\x11mV[\0[4\x80\x15a\x02\xA5W_\x80\xFD[Pa\x02\xAEa\x12\x92V[`@Qa\x02\xC1\x97\x96\x95\x94\x93\x92\x91\x90a3_V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\xD5W_\x80\xFD[Pa\x02\xF0`\x04\x806\x03\x81\x01\x90a\x02\xEB\x91\x90a3\xE1V[a\x13\x9BV[\0[4\x80\x15a\x02\xFDW_\x80\xFD[Pa\x03\x06a\x15\xF4V[`@Qa\x03\x13\x91\x90a-uV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03'W_\x80\xFD[Pa\x03B`\x04\x806\x03\x81\x01\x90a\x03=\x91\x90a,\x8DV[a\x16-V[`@Qa\x03O\x91\x90a.|V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03cW_\x80\xFD[Pa\x03~`\x04\x806\x03\x81\x01\x90a\x03y\x91\x90a,\x8DV[a\x16\xFEV[`@Qa\x03\x8B\x91\x90a,\xD2V[`@Q\x80\x91\x03\x90\xF3[_\x80a\x03\x9Ea\x172V[\x90P\x80`\x07\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[```@Q\x80`@\x01`@R\x80`\x11\x81R` \x01\x7FInputVerification\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RPa\x04\t_a\x17YV[a\x04\x13`\x01a\x17YV[a\x04\x1C_a\x17YV[`@Q` \x01a\x04/\x94\x93\x92\x91\x90a5fV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x90V[``_a\x04Na\x172V[\x90P\x80`\n\x01_\x84\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x04\xE0W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x04\x97W[PPPPP\x91PP\x91\x90PV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x05:\x91\x90a5\xC4V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05UW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05y\x91\x90a6\x07V[a\x05\xBAW3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x05\xB1\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[_a\x05\xC3a\x172V[\x90P\x80_\x01T\x88\x11\x80a\x05\xD5WP_\x88\x14[\x15a\x06\x17W\x87`@Q\x7FG\x11\x08?\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\x81R`\x04\x01a\x06\x0E\x91\x90a62V[`@Q\x80\x91\x03\x90\xFD[_\x81`\x01\x01_\x8A\x81R` \x01\x90\x81R` \x01_ `@Q\x80``\x01`@R\x90\x81_\x82\x01T\x81R` \x01`\x01\x82\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01`\x02\x82\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RPP\x90P_`@Q\x80`\xA0\x01`@R\x80\x8A\x8A\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x83`@\x01Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x83` \x01Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x83_\x01Q\x81R` \x01\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90P_a\x07\xD9\x82a\x18#V[\x90P_a\x08)\x82\x8A\x8A\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa\x18\xE2V[\x90Pa\x084\x81a\x19\x0CV[a\x08?\x8C3\x83a\x19\xDCV[_\x85`\x02\x01_\x8E\x81R` \x01\x90\x81R` \x01_ _\x84\x81R` \x01\x90\x81R` \x01_ \x90P\x80\x8A\x8A\x90\x91\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x92\x90\x91\x92\x90\x91\x92\x90\x91\x92P\x91\x82a\x08\x9D\x92\x91\x90a8OV[P`\x01\x86`\x05\x01_\x8F\x81R` \x01\x90\x81R` \x01_ _\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x85`\x03\x01_\x8E\x81R` \x01\x90\x81R` \x01_ _\x84\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x85`\x04\x01_\x8E\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\t\xBAWPa\t\xB9\x81\x80T\x90Pa\x1B/V[[\x15a\n?W`\x01\x86`\x04\x01_\x8F\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x82\x86`\x06\x01_\x8F\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x8C\x7F\xFE,CXW\x86\xA5\xA6X\xD2\xEC]\xF5\xDE\xA3\xFB3\x85\xB7|\x94\xF6\x0FrO\xF8\x10\x89oA\x985\x8D\x8D\x84`@Qa\n6\x93\x92\x91\x90a:\xE2V[`@Q\x80\x91\x03\x90\xA2[PPPPPPPPPPPPPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\n\x9B\x91\x90a5\xC4V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\n\xB6W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xDA\x91\x90a6\x07V[a\x0B\x1BW3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x0B\x12\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[_a\x0B$a\x172V[\x90P\x80_\x01T\x84\x11\x80a\x0B6WP_\x84\x14[\x15a\x0BxW\x83`@Q\x7FG\x11\x08?\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\x81R`\x04\x01a\x0Bo\x91\x90a62V[`@Q\x80\x91\x03\x90\xFD[_s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xEFi\x97\xF93`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0B\xC6\x91\x90a5\xC4V[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0B\xE0W=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0C\x08\x91\x90a=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x104\x91\x90a=FV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15\x80\x15a\x10\xAFWPs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x10\xF1W3`@Q\x7F\xE1\x91f\xEE\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\x81R`\x04\x01a\x10\xE8\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[a\x10\xF9a\x1C3V[V[a\x11\x03a\x1C\xA1V[a\x11\x0C\x82a\x1D\x87V[a\x11\x16\x82\x82a\x1EzV[PPV[_a\x11#a\x1F\x98V[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[_\x80a\x11Ua \x1FV[\x90P\x80_\x01_\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x90V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cF\xFB\xF6\x8E3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x11\xBA\x91\x90a5\xC4V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11\xD5W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11\xF9\x91\x90a6\x07V[\x15\x80\x15a\x12FWPs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x12\x88W3`@Q\x7F8\x89\x16\xBB\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\x81R`\x04\x01a\x12\x7F\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[a\x12\x90a FV[V[_``\x80_\x80_``_a\x12\xA4a \xB5V[\x90P_\x80\x1B\x81_\x01T\x14\x80\x15a\x12\xBFWP_\x80\x1B\x81`\x01\x01T\x14[a\x12\xFEW`@Q\x7F\x08\xC3y\xA0\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\x81R`\x04\x01a\x12\xF5\x90a=\xBBV[`@Q\x80\x91\x03\x90\xFD[a\x13\x06a \xDCV[a\x13\x0Ea!zV[F0_\x80\x1B_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x13-Wa\x13,a0\xA1V[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x13[W\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x7F\x0F\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\x95\x94\x93\x92\x91\x90\x97P\x97P\x97P\x97P\x97P\x97P\x97PP\x90\x91\x92\x93\x94\x95\x96V[\x86s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xBF\xF3\xAA\xBA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\xE9\x91\x90a62V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x14\x04W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x14(\x91\x90a6\x07V[a\x14iW\x80`@Q\x7F\xB6g\x9C;\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\x81R`\x04\x01a\x14`\x91\x90a62V[`@Q\x80\x91\x03\x90\xFD[a\x14qa\"\x18V[_a\x14za\x172V[\x90P\x80_\x01_\x81T\x80\x92\x91\x90a\x14\x8F\x90a<\xC4V[\x91\x90PUP_\x81_\x01T\x90P`@Q\x80``\x01`@R\x80\x8B\x81R` \x01\x8As\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x89s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RP\x82`\x01\x01_\x83\x81R` \x01\x90\x81R` \x01_ _\x82\x01Q\x81_\x01U` \x82\x01Q\x81`\x01\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`@\x82\x01Q\x81`\x02\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x90PP`\x01\x82`\x0B\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x89\x81\x7FJ\xE5Ojn\x90\r\x80o\xFA[\xB4n\xD9\x14YR=/j\xC9\xB5\xD6$\x04\xFE\xAB\x88v\x86\xD0\x05\x8B\x8B\x8B\x8B\x8B\x8B`@Qa\x15\xE0\x96\x95\x94\x93\x92\x91\x90a>\x15V[`@Q\x80\x91\x03\x90\xA3PPPPPPPPPPV[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[``_a\x168a\x172V[\x90P_\x81`\x06\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x03\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x82\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x16\xF0W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x16\xA7W[PPPPP\x92PPP\x91\x90PV[_\x80a\x17\x08a\x172V[\x90P\x80`\x04\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[_\x7FED\x16\\\xE1e2d\xFD\xCB\t\xB0)\x89\x1E=L\x8D\x85\x83Hh!\x17/\x88.\x19\xA1I\xA8\0\x90P\x90V[``_`\x01a\x17g\x84a\"YV[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17\x85Wa\x17\x84a0\xA1V[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x17\xB7W\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a\x18\x18W\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a\x18\rWa\x18\x0Ca>jV[[\x04\x94P_\x85\x03a\x17\xC4W[\x81\x93PPPP\x91\x90PV[_a\x18\xDB`@Q\x80`\xA0\x01`@R\x80`\x7F\x81R` \x01aB\xE4`\x7F\x919\x80Q\x90` \x01 \x83_\x01Q`@Q` \x01a\x18[\x91\x90a?HV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x84` \x01Q\x85`@\x01Q\x86``\x01Q\x87`\x80\x01Q`@Q` \x01a\x18\x95\x91\x90a?\xA2V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a\x18\xC0\x96\x95\x94\x93\x92\x91\x90a?\xB8V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a#\xAAV[\x90P\x91\x90PV[_\x80_\x80a\x18\xF0\x86\x86a#\xC3V[\x92P\x92P\x92Pa\x19\0\x82\x82a$\x18V[\x82\x93PPPP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c+\x10\x1C\x03\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x19Y\x91\x90a5\xC4V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x19tW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x19\x98\x91\x90a6\x07V[a\x19\xD9W\x80`@Q\x7F&\xCDu\xDC\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\x81R`\x04\x01a\x19\xD0\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[PV[_a\x19\xE5a\x172V[\x90P\x80`\x05\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x1A\x88W\x83\x83\x83`@Q\x7F\xF9\xEDC\x1F\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\x81R`\x04\x01a\x1A\x7F\x93\x92\x91\x90a@\x17V[`@Q\x80\x91\x03\x90\xFD[\x80`\t\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x1B)W\x83\x83\x83`@Q\x7F/\xA71t\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\x81R`\x04\x01a\x1B \x93\x92\x91\x90a@\x17V[`@Q\x80\x91\x03\x90\xFD[PPPPV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cg\x99\xEFR`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1B\x8EW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1B\xB2\x91\x90a@`V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[_a\x1B\xC9a\x1B\xE4V[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[a\x1C\x13a%zV[a\x1C\x1D\x82\x82a%\xBAV[PPV[a\x1C)a%zV[a\x1C1a&\x0BV[V[a\x1C;a&;V[_a\x1CDa \x1FV[\x90P_\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F]\xB9\xEE\nI[\xF2\xE6\xFF\x9C\x91\xA7\x83L\x1B\xA4\xFD\xD2D\xA5\xE8\xAANS{\xD3\x8A\xEA\xE4\xB0s\xAAa\x1C\x89a&{V[`@Qa\x1C\x96\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xA1PV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a\x1DNWP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x1D5a&\x82V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x1D\x85W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1D\xE4W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1E\x08\x91\x90a=FV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x1EwW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\x1En\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a\x1E\xE2WP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1E\xDF\x91\x90a@\xB5V[`\x01[a\x1F#W\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x1F\x1A\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a\x1F\x89W\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a\x1F\x80\x91\x90a27V[`@Q\x80\x91\x03\x90\xFD[a\x1F\x93\x83\x83a&\xD5V[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a \x1DW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x7F\xCD^\xD1\\n\x18~w\xE9\xAE\xE8\x81\x84\xC2\x1FO!\x82\xABX'\xCB;~\x07\xFB\xED\xCDc\xF03\0\x90P\x90V[a Na\"\x18V[_a Wa \x1FV[\x90P`\x01\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7Fb\xE7\x8C\xEA\x01\xBE\xE3 \xCDNB\x02p\xB5\xEAt\0\r\x11\xB0\xC9\xF7GT\xEB\xDB\xFCTK\x05\xA2Xa \x9Da&{V[`@Qa \xAA\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xA1PV[_\x7F\xA1jF\xD9Ba\xC7Q|\xC8\xFF\x89\xF6\x1C\x0C\xE95\x98\xE3\xC8I\x80\x10\x11\xDE\xE6I\xA6\xA5W\xD1\0\x90P\x90V[``_a \xE7a \xB5V[\x90P\x80`\x02\x01\x80Ta \xF8\x90a6\x82V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta!$\x90a6\x82V[\x80\x15a!oW\x80`\x1F\x10a!FWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a!oV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a!RW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[``_a!\x85a \xB5V[\x90P\x80`\x03\x01\x80Ta!\x96\x90a6\x82V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta!\xC2\x90a6\x82V[\x80\x15a\"\rW\x80`\x1F\x10a!\xE4Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\"\rV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a!\xF0W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[a\" a\x11KV[\x15a\"WW`@Q\x7F\xD9<\x06e\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a\"\xB5Wz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a\"\xABWa\"\xAAa>jV[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\"\xF2Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a\"\xE8Wa\"\xE7a>jV[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a#!Wf#\x86\xF2o\xC1\0\0\x83\x81a#\x17Wa#\x16a>jV[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a#JWc\x05\xF5\xE1\0\x83\x81a#@Wa#?a>jV[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a#oWa'\x10\x83\x81a#eWa#da>jV[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a#\x92W`d\x83\x81a#\x88Wa#\x87a>jV[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a#\xA1W`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[_a#\xBCa#\xB6a'GV[\x83a'UV[\x90P\x91\x90PV[_\x80_`A\x84Q\x03a$\x03W_\x80_` \x87\x01Q\x92P`@\x87\x01Q\x91P``\x87\x01Q_\x1A\x90Pa#\xF5\x88\x82\x85\x85a'\x95V[\x95P\x95P\x95PPPPa$\x11V[_`\x02\x85Q_\x1B\x92P\x92P\x92P[\x92P\x92P\x92V[_`\x03\x81\x11\x15a$+Wa$*a@\xE0V[[\x82`\x03\x81\x11\x15a$>Wa$=a@\xE0V[[\x03\x15a%vW`\x01`\x03\x81\x11\x15a$XWa$Wa@\xE0V[[\x82`\x03\x81\x11\x15a$kWa$ja@\xE0V[[\x03a$\xA2W`@Q\x7F\xF6E\xEE\xDF\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02`\x03\x81\x11\x15a$\xB6Wa$\xB5a@\xE0V[[\x82`\x03\x81\x11\x15a$\xC9Wa$\xC8a@\xE0V[[\x03a%\rW\x80_\x1C`@Q\x7F\xFC\xE6\x98\xF7\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\x81R`\x04\x01a%\x04\x91\x90a62V[`@Q\x80\x91\x03\x90\xFD[`\x03\x80\x81\x11\x15a% Wa%\x1Fa@\xE0V[[\x82`\x03\x81\x11\x15a%3Wa%2a@\xE0V[[\x03a%uW\x80`@Q\x7F\xD7\x8B\xCE\x0C\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\x81R`\x04\x01a%l\x91\x90a27V[`@Q\x80\x91\x03\x90\xFD[[PPV[a%\x82a(|V[a%\xB8W`@Q\x7F\xD7\xE6\xBC\xF8\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[a%\xC2a%zV[_a%\xCBa \xB5V[\x90P\x82\x81`\x02\x01\x90\x81a%\xDE\x91\x90aAeV[P\x81\x81`\x03\x01\x90\x81a%\xF0\x91\x90aAeV[P_\x80\x1B\x81_\x01\x81\x90UP_\x80\x1B\x81`\x01\x01\x81\x90UPPPPV[a&\x13a%zV[_a&\x1Ca \x1FV[\x90P_\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPPV[a&Ca\x11KV[a&yW`@Q\x7F\x8D\xFC +\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_3\x90P\x90V[_a&\xAE\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba(\x9AV[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a&\xDE\x82a(\xA3V[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a':Wa'4\x82\x82a)lV[Pa'CV[a'Ba)\xECV[[PPV[_a'Pa*(V[\x90P\x90V[_`@Q\x7F\x19\x01\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\x81R\x83`\x02\x82\x01R\x82`\"\x82\x01R`B\x81 \x91PP\x92\x91PPV[_\x80_\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF]WnsW\xA4P\x1D\xDF\xE9/Fh\x1B \xA0\x84_\x1C\x11\x15a'\xD1W_`\x03\x85\x92P\x92P\x92Pa(rV[_`\x01\x88\x88\x88\x88`@Q_\x81R` \x01`@R`@Qa'\xF4\x94\x93\x92\x91\x90aBOV[` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a(\x14W=_\x80>=_\xFD[PPP` `@Q\x03Q\x90P_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x03a(eW_`\x01_\x80\x1B\x93P\x93P\x93PPa(rV[\x80_\x80_\x1B\x93P\x93P\x93PP[\x94P\x94P\x94\x91PPV[_a(\x85a\x1B\xE4V[_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x90P\x90V[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a(\xFEW\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a(\xF5\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[\x80a)*\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba(\x9AV[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa)\x95\x91\x90a?\xA2V[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a)\xCDW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a)\xD2V[``\x91P[P\x91P\x91Pa)\xE2\x85\x83\x83a*\x8BV[\x92PPP\x92\x91PPV[_4\x11\x15a*&W`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0Fa*Ra+\x18V[a*Za+\x8EV[F0`@Q` \x01a*p\x95\x94\x93\x92\x91\x90aB\x92V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x90V[``\x82a*\xA0Wa*\x9B\x82a,\x05V[a+\x10V[_\x82Q\x14\x80\x15a*\xC6WP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a+\x08W\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a*\xFF\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa+\x11V[[\x93\x92PPPV[_\x80a+\"a \xB5V[\x90P_a+-a \xDCV[\x90P_\x81Q\x11\x15a+IW\x80\x80Q\x90` \x01 \x92PPPa+\x8BV[_\x82_\x01T\x90P_\x80\x1B\x81\x14a+dW\x80\x93PPPPa+\x8BV[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x80a+\x98a \xB5V[\x90P_a+\xA3a!zV[\x90P_\x81Q\x11\x15a+\xBFW\x80\x80Q\x90` \x01 \x92PPPa,\x02V[_\x82`\x01\x01T\x90P_\x80\x1B\x81\x14a+\xDBW\x80\x93PPPPa,\x02V[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x81Q\x11\x15a,\x17W\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[a,l\x81a,ZV[\x81\x14a,vW_\x80\xFD[PV[_\x815\x90Pa,\x87\x81a,cV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a,\xA2Wa,\xA1a,RV[[_a,\xAF\x84\x82\x85\x01a,yV[\x91PP\x92\x91PPV[_\x81\x15\x15\x90P\x91\x90PV[a,\xCC\x81a,\xB8V[\x82RPPV[_` \x82\x01\x90Pa,\xE5_\x83\x01\x84a,\xC3V[\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15a-\"W\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa-\x07V[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a-G\x82a,\xEBV[a-Q\x81\x85a,\xF5V[\x93Pa-a\x81\x85` \x86\x01a-\x05V[a-j\x81a--V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra-\x8D\x81\x84a-=V[\x90P\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a-\xE7\x82a-\xBEV[\x90P\x91\x90PV[a-\xF7\x81a-\xDDV[\x82RPPV[_a.\x08\x83\x83a-\xEEV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a.*\x82a-\x95V[a.4\x81\x85a-\x9FV[\x93Pa.?\x83a-\xAFV[\x80_[\x83\x81\x10\x15a.oW\x81Qa.V\x88\x82a-\xFDV[\x97Pa.a\x83a.\x14V[\x92PP`\x01\x81\x01\x90Pa.BV[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra.\x94\x81\x84a. V[\x90P\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12a.\xBDWa.\xBCa.\x9CV[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a.\xDAWa.\xD9a.\xA0V[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15a.\xF6Wa.\xF5a.\xA4V[[\x92P\x92\x90PV[_\x80\x83`\x1F\x84\x01\x12a/\x12Wa/\x11a.\x9CV[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a//Wa/.a.\xA0V[[` \x83\x01\x91P\x83`\x01\x82\x02\x83\x01\x11\x15a/KWa/Ja.\xA4V[[\x92P\x92\x90PV[_\x80_\x80_\x80_`\x80\x88\x8A\x03\x12\x15a/mWa/la,RV[[_a/z\x8A\x82\x8B\x01a,yV[\x97PP` \x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a/\x9BWa/\x9Aa,VV[[a/\xA7\x8A\x82\x8B\x01a.\xA8V[\x96P\x96PP`@\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a/\xCAWa/\xC9a,VV[[a/\xD6\x8A\x82\x8B\x01a.\xFDV[\x94P\x94PP``\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a/\xF9Wa/\xF8a,VV[[a0\x05\x8A\x82\x8B\x01a.\xFDV[\x92P\x92PP\x92\x95\x98\x91\x94\x97P\x92\x95PV[_\x80_`@\x84\x86\x03\x12\x15a0-Wa0,a,RV[[_a0:\x86\x82\x87\x01a,yV[\x93PP` \x84\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a0[Wa0Za,VV[[a0g\x86\x82\x87\x01a.\xFDV[\x92P\x92PP\x92P\x92P\x92V[a0|\x81a-\xDDV[\x81\x14a0\x86W_\x80\xFD[PV[_\x815\x90Pa0\x97\x81a0sV[\x92\x91PPV[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[a0\xD7\x82a--V[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a0\xF6Wa0\xF5a0\xA1V[[\x80`@RPPPV[_a1\x08a,IV[\x90Pa1\x14\x82\x82a0\xCEV[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a13Wa12a0\xA1V[[a1<\x82a--V[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_a1ia1d\x84a1\x19V[a0\xFFV[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15a1\x85Wa1\x84a0\x9DV[[a1\x90\x84\x82\x85a1IV[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12a1\xACWa1\xABa.\x9CV[[\x815a1\xBC\x84\x82` \x86\x01a1WV[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a1\xDBWa1\xDAa,RV[[_a1\xE8\x85\x82\x86\x01a0\x89V[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a2\tWa2\x08a,VV[[a2\x15\x85\x82\x86\x01a1\x98V[\x91PP\x92P\x92\x90PV[_\x81\x90P\x91\x90PV[a21\x81a2\x1FV[\x82RPPV[_` \x82\x01\x90Pa2J_\x83\x01\x84a2(V[\x92\x91PPV[_\x7F\xFF\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\x82\x16\x90P\x91\x90PV[a2\x84\x81a2PV[\x82RPPV[a2\x93\x81a,ZV[\x82RPPV[a2\xA2\x81a-\xDDV[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a2\xDA\x81a,ZV[\x82RPPV[_a2\xEB\x83\x83a2\xD1V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a3\r\x82a2\xA8V[a3\x17\x81\x85a2\xB2V[\x93Pa3\"\x83a2\xC2V[\x80_[\x83\x81\x10\x15a3RW\x81Qa39\x88\x82a2\xE0V[\x97Pa3D\x83a2\xF7V[\x92PP`\x01\x81\x01\x90Pa3%V[P\x85\x93PPPP\x92\x91PPV[_`\xE0\x82\x01\x90Pa3r_\x83\x01\x8Aa2{V[\x81\x81\x03` \x83\x01Ra3\x84\x81\x89a-=V[\x90P\x81\x81\x03`@\x83\x01Ra3\x98\x81\x88a-=V[\x90Pa3\xA7``\x83\x01\x87a2\x8AV[a3\xB4`\x80\x83\x01\x86a2\x99V[a3\xC1`\xA0\x83\x01\x85a2(V[\x81\x81\x03`\xC0\x83\x01Ra3\xD3\x81\x84a3\x03V[\x90P\x98\x97PPPPPPPPV[_\x80_\x80_\x80_`\xA0\x88\x8A\x03\x12\x15a3\xFCWa3\xFBa,RV[[_a4\t\x8A\x82\x8B\x01a,yV[\x97PP` a4\x1A\x8A\x82\x8B\x01a0\x89V[\x96PP`@a4+\x8A\x82\x8B\x01a0\x89V[\x95PP``\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a4LWa4Ka,VV[[a4X\x8A\x82\x8B\x01a.\xFDV[\x94P\x94PP`\x80\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a4{Wa4za,VV[[a4\x87\x8A\x82\x8B\x01a.\xFDV[\x92P\x92PP\x92\x95\x98\x91\x94\x97P\x92\x95PV[_\x81\x90P\x92\x91PPV[_a4\xAC\x82a,\xEBV[a4\xB6\x81\x85a4\x98V[\x93Pa4\xC6\x81\x85` \x86\x01a-\x05V[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_a5\x06`\x02\x83a4\x98V[\x91Pa5\x11\x82a4\xD2V[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_a5P`\x01\x83a4\x98V[\x91Pa5[\x82a5\x1CV[`\x01\x82\x01\x90P\x91\x90PV[_a5q\x82\x87a4\xA2V[\x91Pa5|\x82a4\xFAV[\x91Pa5\x88\x82\x86a4\xA2V[\x91Pa5\x93\x82a5DV[\x91Pa5\x9F\x82\x85a4\xA2V[\x91Pa5\xAA\x82a5DV[\x91Pa5\xB6\x82\x84a4\xA2V[\x91P\x81\x90P\x95\x94PPPPPV[_` \x82\x01\x90Pa5\xD7_\x83\x01\x84a2\x99V[\x92\x91PPV[a5\xE6\x81a,\xB8V[\x81\x14a5\xF0W_\x80\xFD[PV[_\x81Q\x90Pa6\x01\x81a5\xDDV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a6\x1CWa6\x1Ba,RV[[_a6)\x84\x82\x85\x01a5\xF3V[\x91PP\x92\x91PPV[_` \x82\x01\x90Pa6E_\x83\x01\x84a2\x8AV[\x92\x91PPV[_\x82\x90P\x92\x91PPV[\x7FNH{q\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_R`\"`\x04R`$_\xFD[_`\x02\x82\x04\x90P`\x01\x82\x16\x80a6\x99W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a6\xACWa6\xABa6UV[[P\x91\x90PV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_` `\x1F\x83\x01\x04\x90P\x91\x90PV[_\x82\x82\x1B\x90P\x92\x91PPV[_`\x08\x83\x02a7\x0E\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82a6\xD3V[a7\x18\x86\x83a6\xD3V[\x95P\x80\x19\x84\x16\x93P\x80\x86\x16\x84\x17\x92PPP\x93\x92PPPV[_\x81\x90P\x91\x90PV[_a7Sa7Na7I\x84a,ZV[a70V[a,ZV[\x90P\x91\x90PV[_\x81\x90P\x91\x90PV[a7l\x83a79V[a7\x80a7x\x82a7ZV[\x84\x84Ta6\xDFV[\x82UPPPPV[_\x90V[a7\x94a7\x88V[a7\x9F\x81\x84\x84a7cV[PPPV[[\x81\x81\x10\x15a7\xC2Wa7\xB7_\x82a7\x8CV[`\x01\x81\x01\x90Pa7\xA5V[PPV[`\x1F\x82\x11\x15a8\x07Wa7\xD8\x81a6\xB2V[a7\xE1\x84a6\xC4V[\x81\x01` \x85\x10\x15a7\xF0W\x81\x90P[a8\x04a7\xFC\x85a6\xC4V[\x83\x01\x82a7\xA4V[PP[PPPV[_\x82\x82\x1C\x90P\x92\x91PPV[_a8'_\x19\x84`\x08\x02a8\x0CV[\x19\x80\x83\x16\x91PP\x92\x91PPV[_a8?\x83\x83a8\x18V[\x91P\x82`\x02\x02\x82\x17\x90P\x92\x91PPV[a8Y\x83\x83a6KV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a8rWa8qa0\xA1V[[a8|\x82Ta6\x82V[a8\x87\x82\x82\x85a7\xC6V[_`\x1F\x83\x11`\x01\x81\x14a8\xB4W_\x84\x15a8\xA2W\x82\x87\x015\x90P[a8\xAC\x85\x82a84V[\x86UPa9\x13V[`\x1F\x19\x84\x16a8\xC2\x86a6\xB2V[_[\x82\x81\x10\x15a8\xE9W\x84\x89\x015\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90Pa8\xC4V[\x86\x83\x10\x15a9\x06W\x84\x89\x015a9\x02`\x1F\x89\x16\x82a8\x18V[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x80\xFD[\x82\x81\x837PPPV[_a9D\x83\x85a9\x1CV[\x93P\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x15a9wWa9va9,V[[` \x83\x02\x92Pa9\x88\x83\x85\x84a90V[\x82\x84\x01\x90P\x93\x92PPPV[_\x81T\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81Ta9\xDC\x81a6\x82V[a9\xE6\x81\x86a9\xC0V[\x94P`\x01\x82\x16_\x81\x14a:\0W`\x01\x81\x14a:\x16Wa:HV[`\xFF\x19\x83\x16\x86R\x81\x15\x15` \x02\x86\x01\x93Pa:HV[a:\x1F\x85a6\xB2V[_[\x83\x81\x10\x15a:@W\x81T\x81\x89\x01R`\x01\x82\x01\x91P` \x81\x01\x90Pa:!V[\x80\x88\x01\x95PPP[PPP\x92\x91PPV[_a:\\\x83\x83a9\xD0V[\x90P\x92\x91PPV[_`\x01\x82\x01\x90P\x91\x90PV[_a:z\x82a9\x94V[a:\x84\x81\x85a9\x9EV[\x93P\x83` \x82\x02\x85\x01a:\x96\x85a9\xAEV[\x80_[\x85\x81\x10\x15a:\xD0W\x84\x84\x03\x89R\x81a:\xB1\x85\x82a:QV[\x94Pa:\xBC\x83a:dV[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90Pa:\x99V[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_`@\x82\x01\x90P\x81\x81\x03_\x83\x01Ra:\xFB\x81\x85\x87a99V[\x90P\x81\x81\x03` \x83\x01Ra;\x0F\x81\x84a:pV[\x90P\x94\x93PPPPV[_\x80\xFD[_\x80\xFD[_\x81Q\x90Pa;/\x81a0sV[\x92\x91PPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a;OWa;Na0\xA1V[[a;X\x82a--V[\x90P` \x81\x01\x90P\x91\x90PV[_a;wa;r\x84a;5V[a0\xFFV[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15a;\x93Wa;\x92a0\x9DV[[a;\x9E\x84\x82\x85a-\x05V[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12a;\xBAWa;\xB9a.\x9CV[[\x81Qa;\xCA\x84\x82` \x86\x01a;eV[\x91PP\x92\x91PPV[_``\x82\x84\x03\x12\x15a;\xE8Wa;\xE7a;\x19V[[a;\xF2``a0\xFFV[\x90P_a<\x01\x84\x82\x85\x01a;!V[_\x83\x01RP` a<\x14\x84\x82\x85\x01a;!V[` \x83\x01RP`@\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a<8Wa<7a;\x1DV[[a\x01\x83\x85\x84a1IV[a>\n\x83a--V[\x84\x01\x90P\x93\x92PPPV[_`\x80\x82\x01\x90Pa>(_\x83\x01\x89a2\x99V[a>5` \x83\x01\x88a2\x99V[\x81\x81\x03`@\x83\x01Ra>H\x81\x86\x88a=\xE9V[\x90P\x81\x81\x03``\x83\x01Ra>]\x81\x84\x86a=\xE9V[\x90P\x97\x96PPPPPPPV[\x7FNH{q\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_R`\x12`\x04R`$_\xFD[_\x81Q\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a>\xC3\x81a2\x1FV[\x82RPPV[_a>\xD4\x83\x83a>\xBAV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a>\xF6\x82a>\x97V[a?\0\x81\x85a>\xA1V[\x93Pa?\x0B\x83a>\xABV[\x80_[\x83\x81\x10\x15a?;W\x81Qa?\"\x88\x82a>\xC9V[\x97Pa?-\x83a>\xE0V[\x92PP`\x01\x81\x01\x90Pa?\x0EV[P\x85\x93PPPP\x92\x91PPV[_a?S\x82\x84a>\xECV[\x91P\x81\x90P\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[_a?|\x82a?^V[a?\x86\x81\x85a?hV[\x93Pa?\x96\x81\x85` \x86\x01a-\x05V[\x80\x84\x01\x91PP\x92\x91PPV[_a?\xAD\x82\x84a?rV[\x91P\x81\x90P\x92\x91PPV[_`\xC0\x82\x01\x90Pa?\xCB_\x83\x01\x89a2(V[a?\xD8` \x83\x01\x88a2(V[a?\xE5`@\x83\x01\x87a2\x99V[a?\xF2``\x83\x01\x86a2\x99V[a?\xFF`\x80\x83\x01\x85a2\x8AV[a@\x0C`\xA0\x83\x01\x84a2(V[\x97\x96PPPPPPPV[_``\x82\x01\x90Pa@*_\x83\x01\x86a2\x8AV[a@7` \x83\x01\x85a2\x99V[a@D`@\x83\x01\x84a2\x99V[\x94\x93PPPPV[_\x81Q\x90Pa@Z\x81a,cV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a@uWa@ta,RV[[_a@\x82\x84\x82\x85\x01a@LV[\x91PP\x92\x91PPV[a@\x94\x81a2\x1FV[\x81\x14a@\x9EW_\x80\xFD[PV[_\x81Q\x90Pa@\xAF\x81a@\x8BV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a@\xCAWa@\xC9a,RV[[_a@\xD7\x84\x82\x85\x01a@\xA1V[\x91PP\x92\x91PPV[\x7FNH{q\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_R`!`\x04R`$_\xFD[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[`\x1F\x82\x11\x15aA`WaA1\x81aA\rV[aA:\x84a6\xC4V[\x81\x01` \x85\x10\x15aAIW\x81\x90P[aA]aAU\x85a6\xC4V[\x83\x01\x82a7\xA4V[PP[PPPV[aAn\x82a,\xEBV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aA\x87WaA\x86a0\xA1V[[aA\x91\x82Ta6\x82V[aA\x9C\x82\x82\x85aA\x1FV[_` \x90P`\x1F\x83\x11`\x01\x81\x14aA\xCDW_\x84\x15aA\xBBW\x82\x87\x01Q\x90P[aA\xC5\x85\x82a84V[\x86UPaB,V[`\x1F\x19\x84\x16aA\xDB\x86aA\rV[_[\x82\x81\x10\x15aB\x02W\x84\x89\x01Q\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90PaA\xDDV[\x86\x83\x10\x15aB\x1FW\x84\x89\x01QaB\x1B`\x1F\x89\x16\x82a8\x18V[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPV[_`\xFF\x82\x16\x90P\x91\x90PV[aBI\x81aB4V[\x82RPPV[_`\x80\x82\x01\x90PaBb_\x83\x01\x87a2(V[aBo` \x83\x01\x86aB@V[aB|`@\x83\x01\x85a2(V[aB\x89``\x83\x01\x84a2(V[\x95\x94PPPPPV[_`\xA0\x82\x01\x90PaB\xA5_\x83\x01\x88a2(V[aB\xB2` \x83\x01\x87a2(V[aB\xBF`@\x83\x01\x86a2(V[aB\xCC``\x83\x01\x85a2\x8AV[aB\xD9`\x80\x83\x01\x84a2\x99V[\x96\x95PPPPPPV\xFECiphertextVerification(bytes32[] ctHandles,address userAddress,address contractAddress,uint256 contractChainId,bytes extraData)", ); /// The runtime bytecode of the contract, as deployed on the network. /// /// ```text - ///0x6080604052600436106100f2575f3560e01c806352d1902d11610089578063a700499611610058578063a7004996146102ca578063ad3cb1cc146102f2578063ce7e42571461031c578063e96f88ea14610358576100f2565b806352d1902d146102305780635c975abb1461025a5780638456cb591461028457806384b0196e1461029a576100f2565b8063338007fc116100c5578063338007fc146101c057806339f73810146101e85780633f4ba83a146101fe5780634f1ef28614610214576100f2565b80630c615839146100f65780630d8e6e2c146101325780631bbe9fae1461015c57806331bedea314610198575b5f80fd5b348015610101575f80fd5b5061011c60048036038101906101179190612c74565b610394565b6040516101299190612cb9565b60405180910390f35b34801561013d575f80fd5b506101466103c8565b6040516101539190612d5c565b60405180910390f35b348015610167575f80fd5b50610182600480360381019061017d9190612c74565b610443565b60405161018f9190612e63565b60405180910390f35b3480156101a3575f80fd5b506101be60048036038101906101b99190612f39565b6104ed565b005b3480156101cb575f80fd5b506101e660048036038101906101e19190612ffd565b610a4e565b005b3480156101f3575f80fd5b506101fc610dc7565b005b348015610209575f80fd5b50610212610fb3565b005b61022e600480360381019061022991906131ac565b6110fb565b005b34801561023b575f80fd5b5061024461111a565b604051610251919061321e565b60405180910390f35b348015610265575f80fd5b5061026e61114b565b60405161027b9190612cb9565b60405180910390f35b34801561028f575f80fd5b5061029861116d565b005b3480156102a5575f80fd5b506102ae611292565b6040516102c19796959493929190613346565b60405180910390f35b3480156102d5575f80fd5b506102f060048036038101906102eb91906133c8565b61139b565b005b3480156102fd575f80fd5b506103066115db565b6040516103139190612d5c565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190612c74565b611614565b60405161034f9190612e63565b60405180910390f35b348015610363575f80fd5b5061037e60048036038101906103799190612c74565b6116e5565b60405161038b9190612cb9565b60405180910390f35b5f8061039e611719565b9050806007015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b60606040518060400160405280601181526020017f496e707574566572696669636174696f6e0000000000000000000000000000008152506104095f611740565b6104136001611740565b61041c5f611740565b60405160200161042f949392919061354d565b604051602081830303815290604052905090565b60605f61044e611719565b905080600a015f8481526020019081526020015f208054806020026020016040519081016040528092919081815260200182805480156104e057602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610497575b5050505050915050919050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b815260040161053a91906135ab565b602060405180830381865afa158015610555573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061057991906135ee565b6105ba57336040517f52d725f50000000000000000000000000000000000000000000000000000000081526004016105b191906135ab565b60405180910390fd5b5f6105c3611719565b9050805f01548811806105d557505f88145b1561061757876040517f4711083f00000000000000000000000000000000000000000000000000000000815260040161060e9190613619565b60405180910390fd5b5f816001015f8a81526020019081526020015f206040518060600160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090505f6040518060a001604052808a8a808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508152602001836040015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001835f0151815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081525090505f6107d98261180a565b90505f610829828a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050506118c9565b9050610834816118f3565b61083f8c33836119c3565b5f856002015f8e81526020019081526020015f205f8481526020019081526020015f209050808a8a90918060018154018082558091505060019003905f5260205f20015f90919290919290919290919250918261089d929190613836565b506001866005015f8f81526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550856003015f8e81526020019081526020015f205f8481526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550856004015f8e81526020019081526020015f205f9054906101000a900460ff161580156109ba57506109b98180549050611b16565b5b15610a3f576001866004015f8f81526020019081526020015f205f6101000a81548160ff02191690831515021790555082866006015f8f81526020019081526020015f20819055508c7ffe2c43585786a5a658d2ec5df5dea3fb3385b77c94f60f724ff810896f4198358d8d84604051610a3693929190613ac9565b60405180910390a25b50505050505050505050505050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b8152600401610a9b91906135ab565b602060405180830381865afa158015610ab6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ada91906135ee565b610b1b57336040517f52d725f5000000000000000000000000000000000000000000000000000000008152600401610b1291906135ab565b60405180910390fd5b5f610b24611719565b9050805f0154841180610b3657505f84145b15610b7857836040517f4711083f000000000000000000000000000000000000000000000000000000008152600401610b6f9190613619565b60405180910390fd5b5f73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663ef6997f9336040518263ffffffff1660e01b8152600401610bc691906135ab565b5f60405180830381865afa158015610be0573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c089190613c37565b90505f81602001519050610c1d8633836119c3565b826008015f8781526020019081526020015f205f815480929190610c4090613cab565b91905055506001836009015f8881526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555082600a015f8781526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826007015f8781526020019081526020015f205f9054906101000a900460ff16158015610d615750610d60836008015f8881526020019081526020015f2054611b16565b5b15610dbf576001836007015f8881526020019081526020015f205f6101000a81548160ff021916908315150217905550857fe465e141fa8abd95ab7e0855543307f8506ab0170ef664420fb71ab7de0183de60405160405180910390a25b505050505050565b6001610dd1611ba7565b67ffffffffffffffff1614610e12576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f610e1d611bcb565b9050805f0160089054906101000a900460ff1680610e6557508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b15610e9c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff021916908315150217905550610f556040518060400160405280601181526020017f496e707574566572696669636174696f6e0000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250611bf2565b610f5d611c08565b5f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d282604051610fa79190613d14565b60405180910390a15050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611010573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110349190613d2d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156110af575073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156110f157336040517fe19166ee0000000000000000000000000000000000000000000000000000000081526004016110e891906135ab565b60405180910390fd5b6110f9611c1a565b565b611103611c88565b61110c82611d6e565b6111168282611e61565b5050565b5f611123611f7f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b5f80611155612006565b9050805f015f9054906101000a900460ff1691505090565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff166346fbf68e336040518263ffffffff1660e01b81526004016111ba91906135ab565b602060405180830381865afa1580156111d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f991906135ee565b158015611246575073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561128857336040517f388916bb00000000000000000000000000000000000000000000000000000000815260040161127f91906135ab565b60405180910390fd5b61129061202d565b565b5f6060805f805f60605f6112a461209c565b90505f801b815f01541480156112bf57505f801b8160010154145b6112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590613da2565b60405180910390fd5b6113066120c3565b61130e612161565b46305f801b5f67ffffffffffffffff81111561132d5761132c613088565b5b60405190808252806020026020018201604052801561135b5781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b8673a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663bff3aaba826040518263ffffffff1660e01b81526004016113e99190613619565b602060405180830381865afa158015611404573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061142891906135ee565b61146957806040517fb6679c3b0000000000000000000000000000000000000000000000000000000081526004016114609190613619565b60405180910390fd5b6114716121ff565b5f61147a611719565b9050805f015f81548092919061148f90613cab565b91905055505f815f0154905060405180606001604052808b81526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815250826001015f8381526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505089817f4ae54f6a6e900d806ffa5bb46ed91459523d2f6ac9b5d62404feab887686d0058b8b8b8b8b8b6040516115c796959493929190613dfc565b60405180910390a350505050505050505050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60605f61161f611719565b90505f816006015f8581526020019081526020015f20549050816003015f8581526020019081526020015f205f8281526020019081526020015f208054806020026020016040519081016040528092919081815260200182805480156116d757602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161168e575b505050505092505050919050565b5f806116ef611719565b9050806004015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b5f7f4544165ce1653264fdcb09b029891e3d4c8d8583486821172f882e19a149a800905090565b60605f600161174e84612240565b0190505f8167ffffffffffffffff81111561176c5761176b613088565b5b6040519080825280601f01601f19166020018201604052801561179e5781602001600182028036833780820191505090505b5090505f82602001820190505b6001156117ff578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816117f4576117f3613e51565b5b0494505f85036117ab575b819350505050919050565b5f6118c26040518060a00160405280607f81526020016142cb607f913980519060200120835f01516040516020016118429190613f2f565b60405160208183030381529060405280519060200120846020015185604001518660600151876080015160405160200161187c9190613f89565b604051602081830303815290604052805190602001206040516020016118a796959493929190613f9f565b60405160208183030381529060405280519060200120612391565b9050919050565b5f805f806118d786866123aa565b9250925092506118e782826123ff565b82935050505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632b101c03826040518263ffffffff1660e01b815260040161194091906135ab565b602060405180830381865afa15801561195b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197f91906135ee565b6119c057806040517f26cd75dc0000000000000000000000000000000000000000000000000000000081526004016119b791906135ab565b60405180910390fd5b50565b5f6119cc611719565b9050806005015f8581526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611a6f578383836040517ff9ed431f000000000000000000000000000000000000000000000000000000008152600401611a6693929190613ffe565b60405180910390fd5b806009015f8581526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611b10578383836040517f2fa73174000000000000000000000000000000000000000000000000000000008152600401611b0793929190613ffe565b60405180910390fd5b50505050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16636799ef526040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b999190614047565b905080831015915050919050565b5f611bb0611bcb565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b611bfa612561565b611c0482826125a1565b5050565b611c10612561565b611c186125f2565b565b611c22612622565b5f611c2b612006565b90505f815f015f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611c70612662565b604051611c7d91906135ab565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480611d3557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611d1c612669565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611d6c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dcb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611def9190613d2d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e5e57336040517f0e56cf3d000000000000000000000000000000000000000000000000000000008152600401611e5591906135ab565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611ec957506040513d601f19601f82011682018060405250810190611ec6919061409c565b60015b611f0a57816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611f0191906135ab565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b8114611f7057806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401611f67919061321e565b60405180910390fd5b611f7a83836126bc565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614612004576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300905090565b6120356121ff565b5f61203e612006565b90506001815f015f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612084612662565b60405161209191906135ab565b60405180910390a150565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f6120ce61209c565b90508060020180546120df90613669565b80601f016020809104026020016040519081016040528092919081815260200182805461210b90613669565b80156121565780601f1061212d57610100808354040283529160200191612156565b820191905f5260205f20905b81548152906001019060200180831161213957829003601f168201915b505050505091505090565b60605f61216c61209c565b905080600301805461217d90613669565b80601f01602080910402602001604051908101604052809291908181526020018280546121a990613669565b80156121f45780601f106121cb576101008083540402835291602001916121f4565b820191905f5260205f20905b8154815290600101906020018083116121d757829003601f168201915b505050505091505090565b61220761114b565b1561223e576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061229c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161229257612291613e51565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106122d9576d04ee2d6d415b85acef810000000083816122cf576122ce613e51565b5b0492506020810190505b662386f26fc10000831061230857662386f26fc1000083816122fe576122fd613e51565b5b0492506010810190505b6305f5e1008310612331576305f5e100838161232757612326613e51565b5b0492506008810190505b612710831061235657612710838161234c5761234b613e51565b5b0492506004810190505b60648310612379576064838161236f5761236e613e51565b5b0492506002810190505b600a8310612388576001810190505b80915050919050565b5f6123a361239d61272e565b8361273c565b9050919050565b5f805f60418451036123ea575f805f602087015192506040870151915060608701515f1a90506123dc8882858561277c565b9550955095505050506123f8565b5f600285515f1b9250925092505b9250925092565b5f6003811115612412576124116140c7565b5b826003811115612425576124246140c7565b5b031561255d576001600381111561243f5761243e6140c7565b5b826003811115612452576124516140c7565b5b03612489576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561249d5761249c6140c7565b5b8260038111156124b0576124af6140c7565b5b036124f457805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016124eb9190613619565b60405180910390fd5b600380811115612507576125066140c7565b5b82600381111561251a576125196140c7565b5b0361255c57806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401612553919061321e565b60405180910390fd5b5b5050565b612569612863565b61259f576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6125a9612561565b5f6125b261209c565b9050828160020190816125c5919061414c565b50818160030190816125d7919061414c565b505f801b815f01819055505f801b8160010181905550505050565b6125fa612561565b5f612603612006565b90505f815f015f6101000a81548160ff02191690831515021790555050565b61262a61114b565b612660576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f33905090565b5f6126957f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b612881565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6126c58261288a565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156127215761271b8282612953565b5061272a565b6127296129d3565b5b5050565b5f612737612a0f565b905090565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156127b8575f600385925092509250612859565b5f6001888888886040515f81526020016040526040516127db9493929190614236565b6020604051602081039080840390855afa1580156127fb573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361284c575f60015f801b93509350935050612859565b805f805f1b935093509350505b9450945094915050565b5f61286c611bcb565b5f0160089054906101000a900460ff16905090565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b036128e557806040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016128dc91906135ab565b60405180910390fd5b806129117f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b612881565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff168460405161297c9190613f89565b5f60405180830381855af49150503d805f81146129b4576040519150601f19603f3d011682016040523d82523d5f602084013e6129b9565b606091505b50915091506129c9858383612a72565b9250505092915050565b5f341115612a0d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612a39612aff565b612a41612b75565b4630604051602001612a57959493929190614279565b60405160208183030381529060405280519060200120905090565b606082612a8757612a8282612bec565b612af7565b5f8251148015612aad57505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15612aef57836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401612ae691906135ab565b60405180910390fd5b819050612af8565b5b9392505050565b5f80612b0961209c565b90505f612b146120c3565b90505f81511115612b3057808051906020012092505050612b72565b5f825f015490505f801b8114612b4b57809350505050612b72565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f80612b7f61209c565b90505f612b8a612161565b90505f81511115612ba657808051906020012092505050612be9565b5f826001015490505f801b8114612bc257809350505050612be9565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f81511115612bfe5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b612c5381612c41565b8114612c5d575f80fd5b50565b5f81359050612c6e81612c4a565b92915050565b5f60208284031215612c8957612c88612c39565b5b5f612c9684828501612c60565b91505092915050565b5f8115159050919050565b612cb381612c9f565b82525050565b5f602082019050612ccc5f830184612caa565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612d09578082015181840152602081019050612cee565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612d2e82612cd2565b612d388185612cdc565b9350612d48818560208601612cec565b612d5181612d14565b840191505092915050565b5f6020820190508181035f830152612d748184612d24565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612dce82612da5565b9050919050565b612dde81612dc4565b82525050565b5f612def8383612dd5565b60208301905092915050565b5f602082019050919050565b5f612e1182612d7c565b612e1b8185612d86565b9350612e2683612d96565b805f5b83811015612e56578151612e3d8882612de4565b9750612e4883612dfb565b925050600181019050612e29565b5085935050505092915050565b5f6020820190508181035f830152612e7b8184612e07565b905092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612ea457612ea3612e83565b5b8235905067ffffffffffffffff811115612ec157612ec0612e87565b5b602083019150836020820283011115612edd57612edc612e8b565b5b9250929050565b5f8083601f840112612ef957612ef8612e83565b5b8235905067ffffffffffffffff811115612f1657612f15612e87565b5b602083019150836001820283011115612f3257612f31612e8b565b5b9250929050565b5f805f805f805f6080888a031215612f5457612f53612c39565b5b5f612f618a828b01612c60565b975050602088013567ffffffffffffffff811115612f8257612f81612c3d565b5b612f8e8a828b01612e8f565b9650965050604088013567ffffffffffffffff811115612fb157612fb0612c3d565b5b612fbd8a828b01612ee4565b9450945050606088013567ffffffffffffffff811115612fe057612fdf612c3d565b5b612fec8a828b01612ee4565b925092505092959891949750929550565b5f805f6040848603121561301457613013612c39565b5b5f61302186828701612c60565b935050602084013567ffffffffffffffff81111561304257613041612c3d565b5b61304e86828701612ee4565b92509250509250925092565b61306381612dc4565b811461306d575f80fd5b50565b5f8135905061307e8161305a565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6130be82612d14565b810181811067ffffffffffffffff821117156130dd576130dc613088565b5b80604052505050565b5f6130ef612c30565b90506130fb82826130b5565b919050565b5f67ffffffffffffffff82111561311a57613119613088565b5b61312382612d14565b9050602081019050919050565b828183375f83830152505050565b5f61315061314b84613100565b6130e6565b90508281526020810184848401111561316c5761316b613084565b5b613177848285613130565b509392505050565b5f82601f83011261319357613192612e83565b5b81356131a384826020860161313e565b91505092915050565b5f80604083850312156131c2576131c1612c39565b5b5f6131cf85828601613070565b925050602083013567ffffffffffffffff8111156131f0576131ef612c3d565b5b6131fc8582860161317f565b9150509250929050565b5f819050919050565b61321881613206565b82525050565b5f6020820190506132315f83018461320f565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b61326b81613237565b82525050565b61327a81612c41565b82525050565b61328981612dc4565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6132c181612c41565b82525050565b5f6132d283836132b8565b60208301905092915050565b5f602082019050919050565b5f6132f48261328f565b6132fe8185613299565b9350613309836132a9565b805f5b8381101561333957815161332088826132c7565b975061332b836132de565b92505060018101905061330c565b5085935050505092915050565b5f60e0820190506133595f83018a613262565b818103602083015261336b8189612d24565b9050818103604083015261337f8188612d24565b905061338e6060830187613271565b61339b6080830186613280565b6133a860a083018561320f565b81810360c08301526133ba81846132ea565b905098975050505050505050565b5f805f805f805f60a0888a0312156133e3576133e2612c39565b5b5f6133f08a828b01612c60565b97505060206134018a828b01613070565b96505060406134128a828b01613070565b955050606088013567ffffffffffffffff81111561343357613432612c3d565b5b61343f8a828b01612ee4565b9450945050608088013567ffffffffffffffff81111561346257613461612c3d565b5b61346e8a828b01612ee4565b925092505092959891949750929550565b5f81905092915050565b5f61349382612cd2565b61349d818561347f565b93506134ad818560208601612cec565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f6134ed60028361347f565b91506134f8826134b9565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f61353760018361347f565b915061354282613503565b600182019050919050565b5f6135588287613489565b9150613563826134e1565b915061356f8286613489565b915061357a8261352b565b91506135868285613489565b91506135918261352b565b915061359d8284613489565b915081905095945050505050565b5f6020820190506135be5f830184613280565b92915050565b6135cd81612c9f565b81146135d7575f80fd5b50565b5f815190506135e8816135c4565b92915050565b5f6020828403121561360357613602612c39565b5b5f613610848285016135da565b91505092915050565b5f60208201905061362c5f830184613271565b92915050565b5f82905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061368057607f821691505b6020821081036136935761369261363c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026136f57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826136ba565b6136ff86836136ba565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61373a61373561373084612c41565b613717565b612c41565b9050919050565b5f819050919050565b61375383613720565b61376761375f82613741565b8484546136c6565b825550505050565b5f90565b61377b61376f565b61378681848461374a565b505050565b5b818110156137a95761379e5f82613773565b60018101905061378c565b5050565b601f8211156137ee576137bf81613699565b6137c8846136ab565b810160208510156137d7578190505b6137eb6137e3856136ab565b83018261378b565b50505b505050565b5f82821c905092915050565b5f61380e5f19846008026137f3565b1980831691505092915050565b5f61382683836137ff565b9150826002028217905092915050565b6138408383613632565b67ffffffffffffffff81111561385957613858613088565b5b6138638254613669565b61386e8282856137ad565b5f601f83116001811461389b575f8415613889578287013590505b613893858261381b565b8655506138fa565b601f1984166138a986613699565b5f5b828110156138d0578489013582556001820191506020850194506020810190506138ab565b868310156138ed57848901356138e9601f8916826137ff565b8355505b6001600288020188555050505b50505050505050565b5f82825260208201905092915050565b5f80fd5b82818337505050565b5f61392b8385613903565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561395e5761395d613913565b5b60208302925061396f838584613917565b82840190509392505050565b5f81549050919050565b5f82825260208201905092915050565b5f819050815f5260205f209050919050565b5f82825260208201905092915050565b5f81546139c381613669565b6139cd81866139a7565b9450600182165f81146139e757600181146139fd57613a2f565b60ff198316865281151560200286019350613a2f565b613a0685613699565b5f5b83811015613a2757815481890152600182019150602081019050613a08565b808801955050505b50505092915050565b5f613a4383836139b7565b905092915050565b5f600182019050919050565b5f613a618261397b565b613a6b8185613985565b935083602082028501613a7d85613995565b805f5b85811015613ab757848403895281613a988582613a38565b9450613aa383613a4b565b925060208a01995050600181019050613a80565b50829750879550505050505092915050565b5f6040820190508181035f830152613ae2818587613920565b90508181036020830152613af68184613a57565b9050949350505050565b5f80fd5b5f80fd5b5f81519050613b168161305a565b92915050565b5f67ffffffffffffffff821115613b3657613b35613088565b5b613b3f82612d14565b9050602081019050919050565b5f613b5e613b5984613b1c565b6130e6565b905082815260208101848484011115613b7a57613b79613084565b5b613b85848285612cec565b509392505050565b5f82601f830112613ba157613ba0612e83565b5b8151613bb1848260208601613b4c565b91505092915050565b5f60608284031215613bcf57613bce613b00565b5b613bd960606130e6565b90505f613be884828501613b08565b5f830152506020613bfb84828501613b08565b602083015250604082015167ffffffffffffffff811115613c1f57613c1e613b04565b5b613c2b84828501613b8d565b60408301525092915050565b5f60208284031215613c4c57613c4b612c39565b5b5f82015167ffffffffffffffff811115613c6957613c68612c3d565b5b613c7584828501613bba565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613cb582612c41565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ce757613ce6613c7e565b5b600182019050919050565b5f67ffffffffffffffff82169050919050565b613d0e81613cf2565b82525050565b5f602082019050613d275f830184613d05565b92915050565b5f60208284031215613d4257613d41612c39565b5b5f613d4f84828501613b08565b91505092915050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f613d8c601583612cdc565b9150613d9782613d58565b602082019050919050565b5f6020820190508181035f830152613db981613d80565b9050919050565b5f82825260208201905092915050565b5f613ddb8385613dc0565b9350613de8838584613130565b613df183612d14565b840190509392505050565b5f608082019050613e0f5f830189613280565b613e1c6020830188613280565b8181036040830152613e2f818688613dd0565b90508181036060830152613e44818486613dd0565b9050979650505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f81519050919050565b5f81905092915050565b5f819050602082019050919050565b613eaa81613206565b82525050565b5f613ebb8383613ea1565b60208301905092915050565b5f602082019050919050565b5f613edd82613e7e565b613ee78185613e88565b9350613ef283613e92565b805f5b83811015613f22578151613f098882613eb0565b9750613f1483613ec7565b925050600181019050613ef5565b5085935050505092915050565b5f613f3a8284613ed3565b915081905092915050565b5f81519050919050565b5f81905092915050565b5f613f6382613f45565b613f6d8185613f4f565b9350613f7d818560208601612cec565b80840191505092915050565b5f613f948284613f59565b915081905092915050565b5f60c082019050613fb25f83018961320f565b613fbf602083018861320f565b613fcc6040830187613280565b613fd96060830186613280565b613fe66080830185613271565b613ff360a083018461320f565b979650505050505050565b5f6060820190506140115f830186613271565b61401e6020830185613280565b61402b6040830184613280565b949350505050565b5f8151905061404181612c4a565b92915050565b5f6020828403121561405c5761405b612c39565b5b5f61406984828501614033565b91505092915050565b61407b81613206565b8114614085575f80fd5b50565b5f8151905061409681614072565b92915050565b5f602082840312156140b1576140b0612c39565b5b5f6140be84828501614088565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f819050815f5260205f209050919050565b601f82111561414757614118816140f4565b614121846136ab565b81016020851015614130578190505b61414461413c856136ab565b83018261378b565b50505b505050565b61415582612cd2565b67ffffffffffffffff81111561416e5761416d613088565b5b6141788254613669565b614183828285614106565b5f60209050601f8311600181146141b4575f84156141a2578287015190505b6141ac858261381b565b865550614213565b601f1984166141c2866140f4565b5f5b828110156141e9578489015182556001820191506020850194506020810190506141c4565b868310156142065784890151614202601f8916826137ff565b8355505b6001600288020188555050505b505050505050565b5f60ff82169050919050565b6142308161421b565b82525050565b5f6080820190506142495f83018761320f565b6142566020830186614227565b614263604083018561320f565b614270606083018461320f565b95945050505050565b5f60a08201905061428c5f83018861320f565b614299602083018761320f565b6142a6604083018661320f565b6142b36060830185613271565b6142c06080830184613280565b969550505050505056fe43697068657274657874566572696669636174696f6e28627974657333325b5d20637448616e646c65732c616464726573732075736572416464726573732c6164647265737320636f6e7472616374416464726573732c75696e7432353620636f6e7472616374436861696e49642c62797465732065787472614461746129 + ///0x6080604052600436106100f2575f3560e01c806352d1902d11610089578063a700499611610058578063a7004996146102ca578063ad3cb1cc146102f2578063ce7e42571461031c578063e96f88ea14610358576100f2565b806352d1902d146102305780635c975abb1461025a5780638456cb591461028457806384b0196e1461029a576100f2565b8063338007fc116100c5578063338007fc146101c057806339f73810146101e85780633f4ba83a146101fe5780634f1ef28614610214576100f2565b80630c615839146100f65780630d8e6e2c146101325780631bbe9fae1461015c57806331bedea314610198575b5f80fd5b348015610101575f80fd5b5061011c60048036038101906101179190612c8d565b610394565b6040516101299190612cd2565b60405180910390f35b34801561013d575f80fd5b506101466103c8565b6040516101539190612d75565b60405180910390f35b348015610167575f80fd5b50610182600480360381019061017d9190612c8d565b610443565b60405161018f9190612e7c565b60405180910390f35b3480156101a3575f80fd5b506101be60048036038101906101b99190612f52565b6104ed565b005b3480156101cb575f80fd5b506101e660048036038101906101e19190613016565b610a4e565b005b3480156101f3575f80fd5b506101fc610dc7565b005b348015610209575f80fd5b50610212610fb3565b005b61022e600480360381019061022991906131c5565b6110fb565b005b34801561023b575f80fd5b5061024461111a565b6040516102519190613237565b60405180910390f35b348015610265575f80fd5b5061026e61114b565b60405161027b9190612cd2565b60405180910390f35b34801561028f575f80fd5b5061029861116d565b005b3480156102a5575f80fd5b506102ae611292565b6040516102c1979695949392919061335f565b60405180910390f35b3480156102d5575f80fd5b506102f060048036038101906102eb91906133e1565b61139b565b005b3480156102fd575f80fd5b506103066115f4565b6040516103139190612d75565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190612c8d565b61162d565b60405161034f9190612e7c565b60405180910390f35b348015610363575f80fd5b5061037e60048036038101906103799190612c8d565b6116fe565b60405161038b9190612cd2565b60405180910390f35b5f8061039e611732565b9050806007015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b60606040518060400160405280601181526020017f496e707574566572696669636174696f6e0000000000000000000000000000008152506104095f611759565b6104136001611759565b61041c5f611759565b60405160200161042f9493929190613566565b604051602081830303815290604052905090565b60605f61044e611732565b905080600a015f8481526020019081526020015f208054806020026020016040519081016040528092919081815260200182805480156104e057602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610497575b5050505050915050919050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b815260040161053a91906135c4565b602060405180830381865afa158015610555573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105799190613607565b6105ba57336040517f52d725f50000000000000000000000000000000000000000000000000000000081526004016105b191906135c4565b60405180910390fd5b5f6105c3611732565b9050805f01548811806105d557505f88145b1561061757876040517f4711083f00000000000000000000000000000000000000000000000000000000815260040161060e9190613632565b60405180910390fd5b5f816001015f8a81526020019081526020015f206040518060600160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090505f6040518060a001604052808a8a808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508152602001836040015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001835f0151815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505081525090505f6107d982611823565b90505f610829828a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050506118e2565b90506108348161190c565b61083f8c33836119dc565b5f856002015f8e81526020019081526020015f205f8481526020019081526020015f209050808a8a90918060018154018082558091505060019003905f5260205f20015f90919290919290919290919250918261089d92919061384f565b506001866005015f8f81526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550856003015f8e81526020019081526020015f205f8481526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550856004015f8e81526020019081526020015f205f9054906101000a900460ff161580156109ba57506109b98180549050611b2f565b5b15610a3f576001866004015f8f81526020019081526020015f205f6101000a81548160ff02191690831515021790555082866006015f8f81526020019081526020015f20819055508c7ffe2c43585786a5a658d2ec5df5dea3fb3385b77c94f60f724ff810896f4198358d8d84604051610a3693929190613ae2565b60405180910390a25b50505050505050505050505050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b8152600401610a9b91906135c4565b602060405180830381865afa158015610ab6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ada9190613607565b610b1b57336040517f52d725f5000000000000000000000000000000000000000000000000000000008152600401610b1291906135c4565b60405180910390fd5b5f610b24611732565b9050805f0154841180610b3657505f84145b15610b7857836040517f4711083f000000000000000000000000000000000000000000000000000000008152600401610b6f9190613632565b60405180910390fd5b5f73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663ef6997f9336040518263ffffffff1660e01b8152600401610bc691906135c4565b5f60405180830381865afa158015610be0573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c089190613c50565b90505f81602001519050610c1d8633836119dc565b826008015f8781526020019081526020015f205f815480929190610c4090613cc4565b91905055506001836009015f8881526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555082600a015f8781526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826007015f8781526020019081526020015f205f9054906101000a900460ff16158015610d615750610d60836008015f8881526020019081526020015f2054611b2f565b5b15610dbf576001836007015f8881526020019081526020015f205f6101000a81548160ff021916908315150217905550857fe465e141fa8abd95ab7e0855543307f8506ab0170ef664420fb71ab7de0183de60405160405180910390a25b505050505050565b6001610dd1611bc0565b67ffffffffffffffff1614610e12576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f610e1d611be4565b9050805f0160089054906101000a900460ff1680610e6557508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b15610e9c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff021916908315150217905550610f556040518060400160405280601181526020017f496e707574566572696669636174696f6e0000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250611c0b565b610f5d611c21565b5f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d282604051610fa79190613d2d565b60405180910390a15050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611010573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110349190613d46565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156110af575073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156110f157336040517fe19166ee0000000000000000000000000000000000000000000000000000000081526004016110e891906135c4565b60405180910390fd5b6110f9611c33565b565b611103611ca1565b61110c82611d87565b6111168282611e7a565b5050565b5f611123611f98565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b5f8061115561201f565b9050805f015f9054906101000a900460ff1691505090565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff166346fbf68e336040518263ffffffff1660e01b81526004016111ba91906135c4565b602060405180830381865afa1580156111d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f99190613607565b158015611246575073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561128857336040517f388916bb00000000000000000000000000000000000000000000000000000000815260040161127f91906135c4565b60405180910390fd5b611290612046565b565b5f6060805f805f60605f6112a46120b5565b90505f801b815f01541480156112bf57505f801b8160010154145b6112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590613dbb565b60405180910390fd5b6113066120dc565b61130e61217a565b46305f801b5f67ffffffffffffffff81111561132d5761132c6130a1565b5b60405190808252806020026020018201604052801561135b5781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b8673a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663bff3aaba826040518263ffffffff1660e01b81526004016113e99190613632565b602060405180830381865afa158015611404573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114289190613607565b61146957806040517fb6679c3b0000000000000000000000000000000000000000000000000000000081526004016114609190613632565b60405180910390fd5b611471612218565b5f61147a611732565b9050805f015f81548092919061148f90613cc4565b91905055505f815f0154905060405180606001604052808b81526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815250826001015f8381526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600182600b015f8381526020019081526020015f208190555089817f4ae54f6a6e900d806ffa5bb46ed91459523d2f6ac9b5d62404feab887686d0058b8b8b8b8b8b6040516115e096959493929190613e15565b60405180910390a350505050505050505050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60605f611638611732565b90505f816006015f8581526020019081526020015f20549050816003015f8581526020019081526020015f205f8281526020019081526020015f208054806020026020016040519081016040528092919081815260200182805480156116f057602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116116a7575b505050505092505050919050565b5f80611708611732565b9050806004015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b5f7f4544165ce1653264fdcb09b029891e3d4c8d8583486821172f882e19a149a800905090565b60605f600161176784612259565b0190505f8167ffffffffffffffff811115611785576117846130a1565b5b6040519080825280601f01601f1916602001820160405280156117b75781602001600182028036833780820191505090505b5090505f82602001820190505b600115611818578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161180d5761180c613e6a565b5b0494505f85036117c4575b819350505050919050565b5f6118db6040518060a00160405280607f81526020016142e4607f913980519060200120835f015160405160200161185b9190613f48565b6040516020818303038152906040528051906020012084602001518560400151866060015187608001516040516020016118959190613fa2565b604051602081830303815290604052805190602001206040516020016118c096959493929190613fb8565b604051602081830303815290604052805190602001206123aa565b9050919050565b5f805f806118f086866123c3565b9250925092506119008282612418565b82935050505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632b101c03826040518263ffffffff1660e01b815260040161195991906135c4565b602060405180830381865afa158015611974573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119989190613607565b6119d957806040517f26cd75dc0000000000000000000000000000000000000000000000000000000081526004016119d091906135c4565b60405180910390fd5b50565b5f6119e5611732565b9050806005015f8581526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611a88578383836040517ff9ed431f000000000000000000000000000000000000000000000000000000008152600401611a7f93929190614017565b60405180910390fd5b806009015f8581526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611b29578383836040517f2fa73174000000000000000000000000000000000000000000000000000000008152600401611b2093929190614017565b60405180910390fd5b50505050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16636799ef526040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bb29190614060565b905080831015915050919050565b5f611bc9611be4565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b611c1361257a565b611c1d82826125ba565b5050565b611c2961257a565b611c3161260b565b565b611c3b61263b565b5f611c4461201f565b90505f815f015f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611c8961267b565b604051611c9691906135c4565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480611d4e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611d35612682565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611d85576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611de4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e089190613d46565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e7757336040517f0e56cf3d000000000000000000000000000000000000000000000000000000008152600401611e6e91906135c4565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611ee257506040513d601f19601f82011682018060405250810190611edf91906140b5565b60015b611f2357816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611f1a91906135c4565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b8114611f8957806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401611f809190613237565b60405180910390fd5b611f9383836126d5565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461201d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300905090565b61204e612218565b5f61205761201f565b90506001815f015f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861209d61267b565b6040516120aa91906135c4565b60405180910390a150565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f6120e76120b5565b90508060020180546120f890613682565b80601f016020809104026020016040519081016040528092919081815260200182805461212490613682565b801561216f5780601f106121465761010080835404028352916020019161216f565b820191905f5260205f20905b81548152906001019060200180831161215257829003601f168201915b505050505091505090565b60605f6121856120b5565b905080600301805461219690613682565b80601f01602080910402602001604051908101604052809291908181526020018280546121c290613682565b801561220d5780601f106121e45761010080835404028352916020019161220d565b820191905f5260205f20905b8154815290600101906020018083116121f057829003601f168201915b505050505091505090565b61222061114b565b15612257576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106122b5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816122ab576122aa613e6a565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106122f2576d04ee2d6d415b85acef810000000083816122e8576122e7613e6a565b5b0492506020810190505b662386f26fc10000831061232157662386f26fc10000838161231757612316613e6a565b5b0492506010810190505b6305f5e100831061234a576305f5e10083816123405761233f613e6a565b5b0492506008810190505b612710831061236f57612710838161236557612364613e6a565b5b0492506004810190505b60648310612392576064838161238857612387613e6a565b5b0492506002810190505b600a83106123a1576001810190505b80915050919050565b5f6123bc6123b6612747565b83612755565b9050919050565b5f805f6041845103612403575f805f602087015192506040870151915060608701515f1a90506123f588828585612795565b955095509550505050612411565b5f600285515f1b9250925092505b9250925092565b5f600381111561242b5761242a6140e0565b5b82600381111561243e5761243d6140e0565b5b03156125765760016003811115612458576124576140e0565b5b82600381111561246b5761246a6140e0565b5b036124a2576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156124b6576124b56140e0565b5b8260038111156124c9576124c86140e0565b5b0361250d57805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016125049190613632565b60405180910390fd5b6003808111156125205761251f6140e0565b5b826003811115612533576125326140e0565b5b0361257557806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161256c9190613237565b60405180910390fd5b5b5050565b61258261287c565b6125b8576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6125c261257a565b5f6125cb6120b5565b9050828160020190816125de9190614165565b50818160030190816125f09190614165565b505f801b815f01819055505f801b8160010181905550505050565b61261361257a565b5f61261c61201f565b90505f815f015f6101000a81548160ff02191690831515021790555050565b61264361114b565b612679576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f33905090565b5f6126ae7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b61289a565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6126de826128a3565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f8151111561273a57612734828261296c565b50612743565b6127426129ec565b5b5050565b5f612750612a28565b905090565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156127d1575f600385925092509250612872565b5f6001888888886040515f81526020016040526040516127f4949392919061424f565b6020604051602081039080840390855afa158015612814573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612865575f60015f801b93509350935050612872565b805f805f1b935093509350505b9450945094915050565b5f612885611be4565b5f0160089054906101000a900460ff16905090565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b036128fe57806040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016128f591906135c4565b60405180910390fd5b8061292a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b61289a565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516129959190613fa2565b5f60405180830381855af49150503d805f81146129cd576040519150601f19603f3d011682016040523d82523d5f602084013e6129d2565b606091505b50915091506129e2858383612a8b565b9250505092915050565b5f341115612a26576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612a52612b18565b612a5a612b8e565b4630604051602001612a70959493929190614292565b60405160208183030381529060405280519060200120905090565b606082612aa057612a9b82612c05565b612b10565b5f8251148015612ac657505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15612b0857836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401612aff91906135c4565b60405180910390fd5b819050612b11565b5b9392505050565b5f80612b226120b5565b90505f612b2d6120dc565b90505f81511115612b4957808051906020012092505050612b8b565b5f825f015490505f801b8114612b6457809350505050612b8b565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f80612b986120b5565b90505f612ba361217a565b90505f81511115612bbf57808051906020012092505050612c02565b5f826001015490505f801b8114612bdb57809350505050612c02565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f81511115612c175780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b612c6c81612c5a565b8114612c76575f80fd5b50565b5f81359050612c8781612c63565b92915050565b5f60208284031215612ca257612ca1612c52565b5b5f612caf84828501612c79565b91505092915050565b5f8115159050919050565b612ccc81612cb8565b82525050565b5f602082019050612ce55f830184612cc3565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612d22578082015181840152602081019050612d07565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612d4782612ceb565b612d518185612cf5565b9350612d61818560208601612d05565b612d6a81612d2d565b840191505092915050565b5f6020820190508181035f830152612d8d8184612d3d565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612de782612dbe565b9050919050565b612df781612ddd565b82525050565b5f612e088383612dee565b60208301905092915050565b5f602082019050919050565b5f612e2a82612d95565b612e348185612d9f565b9350612e3f83612daf565b805f5b83811015612e6f578151612e568882612dfd565b9750612e6183612e14565b925050600181019050612e42565b5085935050505092915050565b5f6020820190508181035f830152612e948184612e20565b905092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612ebd57612ebc612e9c565b5b8235905067ffffffffffffffff811115612eda57612ed9612ea0565b5b602083019150836020820283011115612ef657612ef5612ea4565b5b9250929050565b5f8083601f840112612f1257612f11612e9c565b5b8235905067ffffffffffffffff811115612f2f57612f2e612ea0565b5b602083019150836001820283011115612f4b57612f4a612ea4565b5b9250929050565b5f805f805f805f6080888a031215612f6d57612f6c612c52565b5b5f612f7a8a828b01612c79565b975050602088013567ffffffffffffffff811115612f9b57612f9a612c56565b5b612fa78a828b01612ea8565b9650965050604088013567ffffffffffffffff811115612fca57612fc9612c56565b5b612fd68a828b01612efd565b9450945050606088013567ffffffffffffffff811115612ff957612ff8612c56565b5b6130058a828b01612efd565b925092505092959891949750929550565b5f805f6040848603121561302d5761302c612c52565b5b5f61303a86828701612c79565b935050602084013567ffffffffffffffff81111561305b5761305a612c56565b5b61306786828701612efd565b92509250509250925092565b61307c81612ddd565b8114613086575f80fd5b50565b5f8135905061309781613073565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6130d782612d2d565b810181811067ffffffffffffffff821117156130f6576130f56130a1565b5b80604052505050565b5f613108612c49565b905061311482826130ce565b919050565b5f67ffffffffffffffff821115613133576131326130a1565b5b61313c82612d2d565b9050602081019050919050565b828183375f83830152505050565b5f61316961316484613119565b6130ff565b9050828152602081018484840111156131855761318461309d565b5b613190848285613149565b509392505050565b5f82601f8301126131ac576131ab612e9c565b5b81356131bc848260208601613157565b91505092915050565b5f80604083850312156131db576131da612c52565b5b5f6131e885828601613089565b925050602083013567ffffffffffffffff81111561320957613208612c56565b5b61321585828601613198565b9150509250929050565b5f819050919050565b6132318161321f565b82525050565b5f60208201905061324a5f830184613228565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b61328481613250565b82525050565b61329381612c5a565b82525050565b6132a281612ddd565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6132da81612c5a565b82525050565b5f6132eb83836132d1565b60208301905092915050565b5f602082019050919050565b5f61330d826132a8565b61331781856132b2565b9350613322836132c2565b805f5b8381101561335257815161333988826132e0565b9750613344836132f7565b925050600181019050613325565b5085935050505092915050565b5f60e0820190506133725f83018a61327b565b81810360208301526133848189612d3d565b905081810360408301526133988188612d3d565b90506133a7606083018761328a565b6133b46080830186613299565b6133c160a0830185613228565b81810360c08301526133d38184613303565b905098975050505050505050565b5f805f805f805f60a0888a0312156133fc576133fb612c52565b5b5f6134098a828b01612c79565b975050602061341a8a828b01613089565b965050604061342b8a828b01613089565b955050606088013567ffffffffffffffff81111561344c5761344b612c56565b5b6134588a828b01612efd565b9450945050608088013567ffffffffffffffff81111561347b5761347a612c56565b5b6134878a828b01612efd565b925092505092959891949750929550565b5f81905092915050565b5f6134ac82612ceb565b6134b68185613498565b93506134c6818560208601612d05565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f613506600283613498565b9150613511826134d2565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f613550600183613498565b915061355b8261351c565b600182019050919050565b5f61357182876134a2565b915061357c826134fa565b915061358882866134a2565b915061359382613544565b915061359f82856134a2565b91506135aa82613544565b91506135b682846134a2565b915081905095945050505050565b5f6020820190506135d75f830184613299565b92915050565b6135e681612cb8565b81146135f0575f80fd5b50565b5f81519050613601816135dd565b92915050565b5f6020828403121561361c5761361b612c52565b5b5f613629848285016135f3565b91505092915050565b5f6020820190506136455f83018461328a565b92915050565b5f82905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061369957607f821691505b6020821081036136ac576136ab613655565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261370e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826136d3565b61371886836136d3565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61375361374e61374984612c5a565b613730565b612c5a565b9050919050565b5f819050919050565b61376c83613739565b6137806137788261375a565b8484546136df565b825550505050565b5f90565b613794613788565b61379f818484613763565b505050565b5b818110156137c2576137b75f8261378c565b6001810190506137a5565b5050565b601f821115613807576137d8816136b2565b6137e1846136c4565b810160208510156137f0578190505b6138046137fc856136c4565b8301826137a4565b50505b505050565b5f82821c905092915050565b5f6138275f198460080261380c565b1980831691505092915050565b5f61383f8383613818565b9150826002028217905092915050565b613859838361364b565b67ffffffffffffffff811115613872576138716130a1565b5b61387c8254613682565b6138878282856137c6565b5f601f8311600181146138b4575f84156138a2578287013590505b6138ac8582613834565b865550613913565b601f1984166138c2866136b2565b5f5b828110156138e9578489013582556001820191506020850194506020810190506138c4565b868310156139065784890135613902601f891682613818565b8355505b6001600288020188555050505b50505050505050565b5f82825260208201905092915050565b5f80fd5b82818337505050565b5f613944838561391c565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156139775761397661392c565b5b602083029250613988838584613930565b82840190509392505050565b5f81549050919050565b5f82825260208201905092915050565b5f819050815f5260205f209050919050565b5f82825260208201905092915050565b5f81546139dc81613682565b6139e681866139c0565b9450600182165f8114613a005760018114613a1657613a48565b60ff198316865281151560200286019350613a48565b613a1f856136b2565b5f5b83811015613a4057815481890152600182019150602081019050613a21565b808801955050505b50505092915050565b5f613a5c83836139d0565b905092915050565b5f600182019050919050565b5f613a7a82613994565b613a84818561399e565b935083602082028501613a96856139ae565b805f5b85811015613ad057848403895281613ab18582613a51565b9450613abc83613a64565b925060208a01995050600181019050613a99565b50829750879550505050505092915050565b5f6040820190508181035f830152613afb818587613939565b90508181036020830152613b0f8184613a70565b9050949350505050565b5f80fd5b5f80fd5b5f81519050613b2f81613073565b92915050565b5f67ffffffffffffffff821115613b4f57613b4e6130a1565b5b613b5882612d2d565b9050602081019050919050565b5f613b77613b7284613b35565b6130ff565b905082815260208101848484011115613b9357613b9261309d565b5b613b9e848285612d05565b509392505050565b5f82601f830112613bba57613bb9612e9c565b5b8151613bca848260208601613b65565b91505092915050565b5f60608284031215613be857613be7613b19565b5b613bf260606130ff565b90505f613c0184828501613b21565b5f830152506020613c1484828501613b21565b602083015250604082015167ffffffffffffffff811115613c3857613c37613b1d565b5b613c4484828501613ba6565b60408301525092915050565b5f60208284031215613c6557613c64612c52565b5b5f82015167ffffffffffffffff811115613c8257613c81612c56565b5b613c8e84828501613bd3565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613cce82612c5a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d0057613cff613c97565b5b600182019050919050565b5f67ffffffffffffffff82169050919050565b613d2781613d0b565b82525050565b5f602082019050613d405f830184613d1e565b92915050565b5f60208284031215613d5b57613d5a612c52565b5b5f613d6884828501613b21565b91505092915050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f613da5601583612cf5565b9150613db082613d71565b602082019050919050565b5f6020820190508181035f830152613dd281613d99565b9050919050565b5f82825260208201905092915050565b5f613df48385613dd9565b9350613e01838584613149565b613e0a83612d2d565b840190509392505050565b5f608082019050613e285f830189613299565b613e356020830188613299565b8181036040830152613e48818688613de9565b90508181036060830152613e5d818486613de9565b9050979650505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f81519050919050565b5f81905092915050565b5f819050602082019050919050565b613ec38161321f565b82525050565b5f613ed48383613eba565b60208301905092915050565b5f602082019050919050565b5f613ef682613e97565b613f008185613ea1565b9350613f0b83613eab565b805f5b83811015613f3b578151613f228882613ec9565b9750613f2d83613ee0565b925050600181019050613f0e565b5085935050505092915050565b5f613f538284613eec565b915081905092915050565b5f81519050919050565b5f81905092915050565b5f613f7c82613f5e565b613f868185613f68565b9350613f96818560208601612d05565b80840191505092915050565b5f613fad8284613f72565b915081905092915050565b5f60c082019050613fcb5f830189613228565b613fd86020830188613228565b613fe56040830187613299565b613ff26060830186613299565b613fff608083018561328a565b61400c60a0830184613228565b979650505050505050565b5f60608201905061402a5f83018661328a565b6140376020830185613299565b6140446040830184613299565b949350505050565b5f8151905061405a81612c63565b92915050565b5f6020828403121561407557614074612c52565b5b5f6140828482850161404c565b91505092915050565b6140948161321f565b811461409e575f80fd5b50565b5f815190506140af8161408b565b92915050565b5f602082840312156140ca576140c9612c52565b5b5f6140d7848285016140a1565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f819050815f5260205f209050919050565b601f821115614160576141318161410d565b61413a846136c4565b81016020851015614149578190505b61415d614155856136c4565b8301826137a4565b50505b505050565b61416e82612ceb565b67ffffffffffffffff811115614187576141866130a1565b5b6141918254613682565b61419c82828561411f565b5f60209050601f8311600181146141cd575f84156141bb578287015190505b6141c58582613834565b86555061422c565b601f1984166141db8661410d565b5f5b82811015614202578489015182556001820191506020850194506020810190506141dd565b8683101561421f578489015161421b601f891682613818565b8355505b6001600288020188555050505b505050505050565b5f60ff82169050919050565b61424981614234565b82525050565b5f6080820190506142625f830187613228565b61426f6020830186614240565b61427c6040830185613228565b6142896060830184613228565b95945050505050565b5f60a0820190506142a55f830188613228565b6142b26020830187613228565b6142bf6040830186613228565b6142cc606083018561328a565b6142d96080830184613299565b969550505050505056fe43697068657274657874566572696669636174696f6e28627974657333325b5d20637448616e646c65732c616464726573732075736572416464726573732c6164647265737320636f6e7472616374416464726573732c75696e7432353620636f6e7472616374436861696e49642c62797465732065787472614461746129 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80`@R`\x046\x10a\0\xF2W_5`\xE0\x1C\x80cR\xD1\x90-\x11a\0\x89W\x80c\xA7\0I\x96\x11a\0XW\x80c\xA7\0I\x96\x14a\x02\xCAW\x80c\xAD<\xB1\xCC\x14a\x02\xF2W\x80c\xCE~BW\x14a\x03\x1CW\x80c\xE9o\x88\xEA\x14a\x03XWa\0\xF2V[\x80cR\xD1\x90-\x14a\x020W\x80c\\\x97Z\xBB\x14a\x02ZW\x80c\x84V\xCBY\x14a\x02\x84W\x80c\x84\xB0\x19n\x14a\x02\x9AWa\0\xF2V[\x80c3\x80\x07\xFC\x11a\0\xC5W\x80c3\x80\x07\xFC\x14a\x01\xC0W\x80c9\xF78\x10\x14a\x01\xE8W\x80c?K\xA8:\x14a\x01\xFEW\x80cO\x1E\xF2\x86\x14a\x02\x14Wa\0\xF2V[\x80c\x0CaX9\x14a\0\xF6W\x80c\r\x8En,\x14a\x012W\x80c\x1B\xBE\x9F\xAE\x14a\x01\\W\x80c1\xBE\xDE\xA3\x14a\x01\x98W[_\x80\xFD[4\x80\x15a\x01\x01W_\x80\xFD[Pa\x01\x1C`\x04\x806\x03\x81\x01\x90a\x01\x17\x91\x90a,tV[a\x03\x94V[`@Qa\x01)\x91\x90a,\xB9V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01=W_\x80\xFD[Pa\x01Fa\x03\xC8V[`@Qa\x01S\x91\x90a-\\V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01gW_\x80\xFD[Pa\x01\x82`\x04\x806\x03\x81\x01\x90a\x01}\x91\x90a,tV[a\x04CV[`@Qa\x01\x8F\x91\x90a.cV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xA3W_\x80\xFD[Pa\x01\xBE`\x04\x806\x03\x81\x01\x90a\x01\xB9\x91\x90a/9V[a\x04\xEDV[\0[4\x80\x15a\x01\xCBW_\x80\xFD[Pa\x01\xE6`\x04\x806\x03\x81\x01\x90a\x01\xE1\x91\x90a/\xFDV[a\nNV[\0[4\x80\x15a\x01\xF3W_\x80\xFD[Pa\x01\xFCa\r\xC7V[\0[4\x80\x15a\x02\tW_\x80\xFD[Pa\x02\x12a\x0F\xB3V[\0[a\x02.`\x04\x806\x03\x81\x01\x90a\x02)\x91\x90a1\xACV[a\x10\xFBV[\0[4\x80\x15a\x02;W_\x80\xFD[Pa\x02Da\x11\x1AV[`@Qa\x02Q\x91\x90a2\x1EV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02eW_\x80\xFD[Pa\x02na\x11KV[`@Qa\x02{\x91\x90a,\xB9V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\x8FW_\x80\xFD[Pa\x02\x98a\x11mV[\0[4\x80\x15a\x02\xA5W_\x80\xFD[Pa\x02\xAEa\x12\x92V[`@Qa\x02\xC1\x97\x96\x95\x94\x93\x92\x91\x90a3FV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\xD5W_\x80\xFD[Pa\x02\xF0`\x04\x806\x03\x81\x01\x90a\x02\xEB\x91\x90a3\xC8V[a\x13\x9BV[\0[4\x80\x15a\x02\xFDW_\x80\xFD[Pa\x03\x06a\x15\xDBV[`@Qa\x03\x13\x91\x90a-\\V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03'W_\x80\xFD[Pa\x03B`\x04\x806\x03\x81\x01\x90a\x03=\x91\x90a,tV[a\x16\x14V[`@Qa\x03O\x91\x90a.cV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03cW_\x80\xFD[Pa\x03~`\x04\x806\x03\x81\x01\x90a\x03y\x91\x90a,tV[a\x16\xE5V[`@Qa\x03\x8B\x91\x90a,\xB9V[`@Q\x80\x91\x03\x90\xF3[_\x80a\x03\x9Ea\x17\x19V[\x90P\x80`\x07\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[```@Q\x80`@\x01`@R\x80`\x11\x81R` \x01\x7FInputVerification\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RPa\x04\t_a\x17@V[a\x04\x13`\x01a\x17@V[a\x04\x1C_a\x17@V[`@Q` \x01a\x04/\x94\x93\x92\x91\x90a5MV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x90V[``_a\x04Na\x17\x19V[\x90P\x80`\n\x01_\x84\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x04\xE0W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x04\x97W[PPPPP\x91PP\x91\x90PV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x05:\x91\x90a5\xABV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05UW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05y\x91\x90a5\xEEV[a\x05\xBAW3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x05\xB1\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[_a\x05\xC3a\x17\x19V[\x90P\x80_\x01T\x88\x11\x80a\x05\xD5WP_\x88\x14[\x15a\x06\x17W\x87`@Q\x7FG\x11\x08?\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\x81R`\x04\x01a\x06\x0E\x91\x90a6\x19V[`@Q\x80\x91\x03\x90\xFD[_\x81`\x01\x01_\x8A\x81R` \x01\x90\x81R` \x01_ `@Q\x80``\x01`@R\x90\x81_\x82\x01T\x81R` \x01`\x01\x82\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01`\x02\x82\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RPP\x90P_`@Q\x80`\xA0\x01`@R\x80\x8A\x8A\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x83`@\x01Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x83` \x01Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x83_\x01Q\x81R` \x01\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90P_a\x07\xD9\x82a\x18\nV[\x90P_a\x08)\x82\x8A\x8A\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa\x18\xC9V[\x90Pa\x084\x81a\x18\xF3V[a\x08?\x8C3\x83a\x19\xC3V[_\x85`\x02\x01_\x8E\x81R` \x01\x90\x81R` \x01_ _\x84\x81R` \x01\x90\x81R` \x01_ \x90P\x80\x8A\x8A\x90\x91\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x92\x90\x91\x92\x90\x91\x92\x90\x91\x92P\x91\x82a\x08\x9D\x92\x91\x90a86V[P`\x01\x86`\x05\x01_\x8F\x81R` \x01\x90\x81R` \x01_ _\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x85`\x03\x01_\x8E\x81R` \x01\x90\x81R` \x01_ _\x84\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x85`\x04\x01_\x8E\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\t\xBAWPa\t\xB9\x81\x80T\x90Pa\x1B\x16V[[\x15a\n?W`\x01\x86`\x04\x01_\x8F\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x82\x86`\x06\x01_\x8F\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x8C\x7F\xFE,CXW\x86\xA5\xA6X\xD2\xEC]\xF5\xDE\xA3\xFB3\x85\xB7|\x94\xF6\x0FrO\xF8\x10\x89oA\x985\x8D\x8D\x84`@Qa\n6\x93\x92\x91\x90a:\xC9V[`@Q\x80\x91\x03\x90\xA2[PPPPPPPPPPPPPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\n\x9B\x91\x90a5\xABV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\n\xB6W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xDA\x91\x90a5\xEEV[a\x0B\x1BW3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x0B\x12\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[_a\x0B$a\x17\x19V[\x90P\x80_\x01T\x84\x11\x80a\x0B6WP_\x84\x14[\x15a\x0BxW\x83`@Q\x7FG\x11\x08?\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\x81R`\x04\x01a\x0Bo\x91\x90a6\x19V[`@Q\x80\x91\x03\x90\xFD[_s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xEFi\x97\xF93`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0B\xC6\x91\x90a5\xABV[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0B\xE0W=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0C\x08\x91\x90a<7V[\x90P_\x81` \x01Q\x90Pa\x0C\x1D\x863\x83a\x19\xC3V[\x82`\x08\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x81T\x80\x92\x91\x90a\x0C@\x90a<\xABV[\x91\x90PUP`\x01\x83`\t\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x82`\n\x01_\x87\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x82`\x07\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\raWPa\r`\x83`\x08\x01_\x88\x81R` \x01\x90\x81R` \x01_ Ta\x1B\x16V[[\x15a\r\xBFW`\x01\x83`\x07\x01_\x88\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x85\x7F\xE4e\xE1A\xFA\x8A\xBD\x95\xAB~\x08UT3\x07\xF8Pj\xB0\x17\x0E\xF6dB\x0F\xB7\x1A\xB7\xDE\x01\x83\xDE`@Q`@Q\x80\x91\x03\x90\xA2[PPPPPPV[`\x01a\r\xD1a\x1B\xA7V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x0E\x12W`@Q\x7FoOs\x1F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02_a\x0E\x1Da\x1B\xCBV[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x80a\x0EeWP\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x15[\x15a\x0E\x9CW`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`\x01\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPa\x0FU`@Q\x80`@\x01`@R\x80`\x11\x81R` \x01\x7FInputVerification\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RP`@Q\x80`@\x01`@R\x80`\x01\x81R` \x01\x7F1\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\x81RPa\x1B\xF2V[a\x0F]a\x1C\x08V[_\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x82`@Qa\x0F\xA7\x91\x90a=\x14V[`@Q\x80\x91\x03\x90\xA1PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x10\x10W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x104\x91\x90a=-V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15\x80\x15a\x10\xAFWPs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x10\xF1W3`@Q\x7F\xE1\x91f\xEE\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\x81R`\x04\x01a\x10\xE8\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[a\x10\xF9a\x1C\x1AV[V[a\x11\x03a\x1C\x88V[a\x11\x0C\x82a\x1DnV[a\x11\x16\x82\x82a\x1EaV[PPV[_a\x11#a\x1F\x7FV[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[_\x80a\x11Ua \x06V[\x90P\x80_\x01_\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x90V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cF\xFB\xF6\x8E3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x11\xBA\x91\x90a5\xABV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11\xD5W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11\xF9\x91\x90a5\xEEV[\x15\x80\x15a\x12FWPs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x12\x88W3`@Q\x7F8\x89\x16\xBB\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\x81R`\x04\x01a\x12\x7F\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[a\x12\x90a -V[V[_``\x80_\x80_``_a\x12\xA4a \x9CV[\x90P_\x80\x1B\x81_\x01T\x14\x80\x15a\x12\xBFWP_\x80\x1B\x81`\x01\x01T\x14[a\x12\xFEW`@Q\x7F\x08\xC3y\xA0\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\x81R`\x04\x01a\x12\xF5\x90a=\xA2V[`@Q\x80\x91\x03\x90\xFD[a\x13\x06a \xC3V[a\x13\x0Ea!aV[F0_\x80\x1B_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x13-Wa\x13,a0\x88V[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x13[W\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x7F\x0F\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\x95\x94\x93\x92\x91\x90\x97P\x97P\x97P\x97P\x97P\x97P\x97PP\x90\x91\x92\x93\x94\x95\x96V[\x86s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xBF\xF3\xAA\xBA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\xE9\x91\x90a6\x19V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x14\x04W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x14(\x91\x90a5\xEEV[a\x14iW\x80`@Q\x7F\xB6g\x9C;\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\x81R`\x04\x01a\x14`\x91\x90a6\x19V[`@Q\x80\x91\x03\x90\xFD[a\x14qa!\xFFV[_a\x14za\x17\x19V[\x90P\x80_\x01_\x81T\x80\x92\x91\x90a\x14\x8F\x90a<\xABV[\x91\x90PUP_\x81_\x01T\x90P`@Q\x80``\x01`@R\x80\x8B\x81R` \x01\x8As\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x89s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RP\x82`\x01\x01_\x83\x81R` \x01\x90\x81R` \x01_ _\x82\x01Q\x81_\x01U` \x82\x01Q\x81`\x01\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`@\x82\x01Q\x81`\x02\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x90PP\x89\x81\x7FJ\xE5Ojn\x90\r\x80o\xFA[\xB4n\xD9\x14YR=/j\xC9\xB5\xD6$\x04\xFE\xAB\x88v\x86\xD0\x05\x8B\x8B\x8B\x8B\x8B\x8B`@Qa\x15\xC7\x96\x95\x94\x93\x92\x91\x90a=\xFCV[`@Q\x80\x91\x03\x90\xA3PPPPPPPPPPV[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[``_a\x16\x1Fa\x17\x19V[\x90P_\x81`\x06\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x03\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x82\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x16\xD7W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x16\x8EW[PPPPP\x92PPP\x91\x90PV[_\x80a\x16\xEFa\x17\x19V[\x90P\x80`\x04\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[_\x7FED\x16\\\xE1e2d\xFD\xCB\t\xB0)\x89\x1E=L\x8D\x85\x83Hh!\x17/\x88.\x19\xA1I\xA8\0\x90P\x90V[``_`\x01a\x17N\x84a\"@V[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17lWa\x17ka0\x88V[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x17\x9EW\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a\x17\xFFW\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a\x17\xF4Wa\x17\xF3a>QV[[\x04\x94P_\x85\x03a\x17\xABW[\x81\x93PPPP\x91\x90PV[_a\x18\xC2`@Q\x80`\xA0\x01`@R\x80`\x7F\x81R` \x01aB\xCB`\x7F\x919\x80Q\x90` \x01 \x83_\x01Q`@Q` \x01a\x18B\x91\x90a?/V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x84` \x01Q\x85`@\x01Q\x86``\x01Q\x87`\x80\x01Q`@Q` \x01a\x18|\x91\x90a?\x89V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a\x18\xA7\x96\x95\x94\x93\x92\x91\x90a?\x9FV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a#\x91V[\x90P\x91\x90PV[_\x80_\x80a\x18\xD7\x86\x86a#\xAAV[\x92P\x92P\x92Pa\x18\xE7\x82\x82a#\xFFV[\x82\x93PPPP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c+\x10\x1C\x03\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x19@\x91\x90a5\xABV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x19[W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x19\x7F\x91\x90a5\xEEV[a\x19\xC0W\x80`@Q\x7F&\xCDu\xDC\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\x81R`\x04\x01a\x19\xB7\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[PV[_a\x19\xCCa\x17\x19V[\x90P\x80`\x05\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x1AoW\x83\x83\x83`@Q\x7F\xF9\xEDC\x1F\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\x81R`\x04\x01a\x1Af\x93\x92\x91\x90a?\xFEV[`@Q\x80\x91\x03\x90\xFD[\x80`\t\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x1B\x10W\x83\x83\x83`@Q\x7F/\xA71t\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\x81R`\x04\x01a\x1B\x07\x93\x92\x91\x90a?\xFEV[`@Q\x80\x91\x03\x90\xFD[PPPPV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cg\x99\xEFR`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1BuW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1B\x99\x91\x90a@GV[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[_a\x1B\xB0a\x1B\xCBV[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[a\x1B\xFAa%aV[a\x1C\x04\x82\x82a%\xA1V[PPV[a\x1C\x10a%aV[a\x1C\x18a%\xF2V[V[a\x1C\"a&\"V[_a\x1C+a \x06V[\x90P_\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F]\xB9\xEE\nI[\xF2\xE6\xFF\x9C\x91\xA7\x83L\x1B\xA4\xFD\xD2D\xA5\xE8\xAANS{\xD3\x8A\xEA\xE4\xB0s\xAAa\x1Cpa&bV[`@Qa\x1C}\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xA1PV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a\x1D5WP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x1D\x1Ca&iV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x1DlW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1D\xCBW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1D\xEF\x91\x90a=-V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x1E^W3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\x1EU\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a\x1E\xC9WP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1E\xC6\x91\x90a@\x9CV[`\x01[a\x1F\nW\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x1F\x01\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a\x1FpW\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a\x1Fg\x91\x90a2\x1EV[`@Q\x80\x91\x03\x90\xFD[a\x1Fz\x83\x83a&\xBCV[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a \x04W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x7F\xCD^\xD1\\n\x18~w\xE9\xAE\xE8\x81\x84\xC2\x1FO!\x82\xABX'\xCB;~\x07\xFB\xED\xCDc\xF03\0\x90P\x90V[a 5a!\xFFV[_a >a \x06V[\x90P`\x01\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7Fb\xE7\x8C\xEA\x01\xBE\xE3 \xCDNB\x02p\xB5\xEAt\0\r\x11\xB0\xC9\xF7GT\xEB\xDB\xFCTK\x05\xA2Xa \x84a&bV[`@Qa \x91\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xA1PV[_\x7F\xA1jF\xD9Ba\xC7Q|\xC8\xFF\x89\xF6\x1C\x0C\xE95\x98\xE3\xC8I\x80\x10\x11\xDE\xE6I\xA6\xA5W\xD1\0\x90P\x90V[``_a \xCEa \x9CV[\x90P\x80`\x02\x01\x80Ta \xDF\x90a6iV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta!\x0B\x90a6iV[\x80\x15a!VW\x80`\x1F\x10a!-Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a!VV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a!9W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[``_a!la \x9CV[\x90P\x80`\x03\x01\x80Ta!}\x90a6iV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta!\xA9\x90a6iV[\x80\x15a!\xF4W\x80`\x1F\x10a!\xCBWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a!\xF4V[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a!\xD7W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[a\"\x07a\x11KV[\x15a\">W`@Q\x7F\xD9<\x06e\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a\"\x9CWz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a\"\x92Wa\"\x91a>QV[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\"\xD9Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a\"\xCFWa\"\xCEa>QV[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a#\x08Wf#\x86\xF2o\xC1\0\0\x83\x81a\"\xFEWa\"\xFDa>QV[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a#1Wc\x05\xF5\xE1\0\x83\x81a#'Wa#&a>QV[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a#VWa'\x10\x83\x81a#LWa#Ka>QV[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a#yW`d\x83\x81a#oWa#na>QV[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a#\x88W`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[_a#\xA3a#\x9Da'.V[\x83a'a@\xC7V[[\x82`\x03\x81\x11\x15a$RWa$Qa@\xC7V[[\x03a$\x89W`@Q\x7F\xF6E\xEE\xDF\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02`\x03\x81\x11\x15a$\x9DWa$\x9Ca@\xC7V[[\x82`\x03\x81\x11\x15a$\xB0Wa$\xAFa@\xC7V[[\x03a$\xF4W\x80_\x1C`@Q\x7F\xFC\xE6\x98\xF7\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\x81R`\x04\x01a$\xEB\x91\x90a6\x19V[`@Q\x80\x91\x03\x90\xFD[`\x03\x80\x81\x11\x15a%\x07Wa%\x06a@\xC7V[[\x82`\x03\x81\x11\x15a%\x1AWa%\x19a@\xC7V[[\x03a%\\W\x80`@Q\x7F\xD7\x8B\xCE\x0C\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\x81R`\x04\x01a%S\x91\x90a2\x1EV[`@Q\x80\x91\x03\x90\xFD[[PPV[a%ia(cV[a%\x9FW`@Q\x7F\xD7\xE6\xBC\xF8\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[a%\xA9a%aV[_a%\xB2a \x9CV[\x90P\x82\x81`\x02\x01\x90\x81a%\xC5\x91\x90aALV[P\x81\x81`\x03\x01\x90\x81a%\xD7\x91\x90aALV[P_\x80\x1B\x81_\x01\x81\x90UP_\x80\x1B\x81`\x01\x01\x81\x90UPPPPV[a%\xFAa%aV[_a&\x03a \x06V[\x90P_\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPPV[a&*a\x11KV[a&`W`@Q\x7F\x8D\xFC +\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_3\x90P\x90V[_a&\x95\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba(\x81V[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a&\xC5\x82a(\x8AV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a'!Wa'\x1B\x82\x82a)SV[Pa'*V[a')a)\xD3V[[PPV[_a'7a*\x0FV[\x90P\x90V[_`@Q\x7F\x19\x01\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\x81R\x83`\x02\x82\x01R\x82`\"\x82\x01R`B\x81 \x91PP\x92\x91PPV[_\x80_\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF]WnsW\xA4P\x1D\xDF\xE9/Fh\x1B \xA0\x84_\x1C\x11\x15a'\xB8W_`\x03\x85\x92P\x92P\x92Pa(YV[_`\x01\x88\x88\x88\x88`@Q_\x81R` \x01`@R`@Qa'\xDB\x94\x93\x92\x91\x90aB6V[` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a'\xFBW=_\x80>=_\xFD[PPP` `@Q\x03Q\x90P_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x03a(LW_`\x01_\x80\x1B\x93P\x93P\x93PPa(YV[\x80_\x80_\x1B\x93P\x93P\x93PP[\x94P\x94P\x94\x91PPV[_a(la\x1B\xCBV[_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x90P\x90V[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a(\xE5W\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a(\xDC\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[\x80a)\x11\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba(\x81V[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa)|\x91\x90a?\x89V[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a)\xB4W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a)\xB9V[``\x91P[P\x91P\x91Pa)\xC9\x85\x83\x83a*rV[\x92PPP\x92\x91PPV[_4\x11\x15a*\rW`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0Fa*9a*\xFFV[a*Aa+uV[F0`@Q` \x01a*W\x95\x94\x93\x92\x91\x90aByV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x90V[``\x82a*\x87Wa*\x82\x82a+\xECV[a*\xF7V[_\x82Q\x14\x80\x15a*\xADWP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a*\xEFW\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a*\xE6\x91\x90a5\xABV[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa*\xF8V[[\x93\x92PPPV[_\x80a+\ta \x9CV[\x90P_a+\x14a \xC3V[\x90P_\x81Q\x11\x15a+0W\x80\x80Q\x90` \x01 \x92PPPa+rV[_\x82_\x01T\x90P_\x80\x1B\x81\x14a+KW\x80\x93PPPPa+rV[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x80a+\x7Fa \x9CV[\x90P_a+\x8Aa!aV[\x90P_\x81Q\x11\x15a+\xA6W\x80\x80Q\x90` \x01 \x92PPPa+\xE9V[_\x82`\x01\x01T\x90P_\x80\x1B\x81\x14a+\xC2W\x80\x93PPPPa+\xE9V[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x81Q\x11\x15a+\xFEW\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[a,S\x81a,AV[\x81\x14a,]W_\x80\xFD[PV[_\x815\x90Pa,n\x81a,JV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a,\x89Wa,\x88a,9V[[_a,\x96\x84\x82\x85\x01a,`V[\x91PP\x92\x91PPV[_\x81\x15\x15\x90P\x91\x90PV[a,\xB3\x81a,\x9FV[\x82RPPV[_` \x82\x01\x90Pa,\xCC_\x83\x01\x84a,\xAAV[\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15a-\tW\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa,\xEEV[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a-.\x82a,\xD2V[a-8\x81\x85a,\xDCV[\x93Pa-H\x81\x85` \x86\x01a,\xECV[a-Q\x81a-\x14V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra-t\x81\x84a-$V[\x90P\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a-\xCE\x82a-\xA5V[\x90P\x91\x90PV[a-\xDE\x81a-\xC4V[\x82RPPV[_a-\xEF\x83\x83a-\xD5V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a.\x11\x82a-|V[a.\x1B\x81\x85a-\x86V[\x93Pa.&\x83a-\x96V[\x80_[\x83\x81\x10\x15a.VW\x81Qa.=\x88\x82a-\xE4V[\x97Pa.H\x83a-\xFBV[\x92PP`\x01\x81\x01\x90Pa.)V[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra.{\x81\x84a.\x07V[\x90P\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12a.\xA4Wa.\xA3a.\x83V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a.\xC1Wa.\xC0a.\x87V[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15a.\xDDWa.\xDCa.\x8BV[[\x92P\x92\x90PV[_\x80\x83`\x1F\x84\x01\x12a.\xF9Wa.\xF8a.\x83V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a/\x16Wa/\x15a.\x87V[[` \x83\x01\x91P\x83`\x01\x82\x02\x83\x01\x11\x15a/2Wa/1a.\x8BV[[\x92P\x92\x90PV[_\x80_\x80_\x80_`\x80\x88\x8A\x03\x12\x15a/TWa/Sa,9V[[_a/a\x8A\x82\x8B\x01a,`V[\x97PP` \x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a/\x82Wa/\x81a,=V[[a/\x8E\x8A\x82\x8B\x01a.\x8FV[\x96P\x96PP`@\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a/\xB1Wa/\xB0a,=V[[a/\xBD\x8A\x82\x8B\x01a.\xE4V[\x94P\x94PP``\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a/\xE0Wa/\xDFa,=V[[a/\xEC\x8A\x82\x8B\x01a.\xE4V[\x92P\x92PP\x92\x95\x98\x91\x94\x97P\x92\x95PV[_\x80_`@\x84\x86\x03\x12\x15a0\x14Wa0\x13a,9V[[_a0!\x86\x82\x87\x01a,`V[\x93PP` \x84\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a0BWa0Aa,=V[[a0N\x86\x82\x87\x01a.\xE4V[\x92P\x92PP\x92P\x92P\x92V[a0c\x81a-\xC4V[\x81\x14a0mW_\x80\xFD[PV[_\x815\x90Pa0~\x81a0ZV[\x92\x91PPV[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[a0\xBE\x82a-\x14V[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a0\xDDWa0\xDCa0\x88V[[\x80`@RPPPV[_a0\xEFa,0V[\x90Pa0\xFB\x82\x82a0\xB5V[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a1\x1AWa1\x19a0\x88V[[a1#\x82a-\x14V[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_a1Pa1K\x84a1\0V[a0\xE6V[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15a1lWa1ka0\x84V[[a1w\x84\x82\x85a10V[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12a1\x93Wa1\x92a.\x83V[[\x815a1\xA3\x84\x82` \x86\x01a1>V[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a1\xC2Wa1\xC1a,9V[[_a1\xCF\x85\x82\x86\x01a0pV[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a1\xF0Wa1\xEFa,=V[[a1\xFC\x85\x82\x86\x01a1\x7FV[\x91PP\x92P\x92\x90PV[_\x81\x90P\x91\x90PV[a2\x18\x81a2\x06V[\x82RPPV[_` \x82\x01\x90Pa21_\x83\x01\x84a2\x0FV[\x92\x91PPV[_\x7F\xFF\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\x82\x16\x90P\x91\x90PV[a2k\x81a27V[\x82RPPV[a2z\x81a,AV[\x82RPPV[a2\x89\x81a-\xC4V[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a2\xC1\x81a,AV[\x82RPPV[_a2\xD2\x83\x83a2\xB8V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a2\xF4\x82a2\x8FV[a2\xFE\x81\x85a2\x99V[\x93Pa3\t\x83a2\xA9V[\x80_[\x83\x81\x10\x15a39W\x81Qa3 \x88\x82a2\xC7V[\x97Pa3+\x83a2\xDEV[\x92PP`\x01\x81\x01\x90Pa3\x0CV[P\x85\x93PPPP\x92\x91PPV[_`\xE0\x82\x01\x90Pa3Y_\x83\x01\x8Aa2bV[\x81\x81\x03` \x83\x01Ra3k\x81\x89a-$V[\x90P\x81\x81\x03`@\x83\x01Ra3\x7F\x81\x88a-$V[\x90Pa3\x8E``\x83\x01\x87a2qV[a3\x9B`\x80\x83\x01\x86a2\x80V[a3\xA8`\xA0\x83\x01\x85a2\x0FV[\x81\x81\x03`\xC0\x83\x01Ra3\xBA\x81\x84a2\xEAV[\x90P\x98\x97PPPPPPPPV[_\x80_\x80_\x80_`\xA0\x88\x8A\x03\x12\x15a3\xE3Wa3\xE2a,9V[[_a3\xF0\x8A\x82\x8B\x01a,`V[\x97PP` a4\x01\x8A\x82\x8B\x01a0pV[\x96PP`@a4\x12\x8A\x82\x8B\x01a0pV[\x95PP``\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a43Wa42a,=V[[a4?\x8A\x82\x8B\x01a.\xE4V[\x94P\x94PP`\x80\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a4bWa4aa,=V[[a4n\x8A\x82\x8B\x01a.\xE4V[\x92P\x92PP\x92\x95\x98\x91\x94\x97P\x92\x95PV[_\x81\x90P\x92\x91PPV[_a4\x93\x82a,\xD2V[a4\x9D\x81\x85a4\x7FV[\x93Pa4\xAD\x81\x85` \x86\x01a,\xECV[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_a4\xED`\x02\x83a4\x7FV[\x91Pa4\xF8\x82a4\xB9V[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_a57`\x01\x83a4\x7FV[\x91Pa5B\x82a5\x03V[`\x01\x82\x01\x90P\x91\x90PV[_a5X\x82\x87a4\x89V[\x91Pa5c\x82a4\xE1V[\x91Pa5o\x82\x86a4\x89V[\x91Pa5z\x82a5+V[\x91Pa5\x86\x82\x85a4\x89V[\x91Pa5\x91\x82a5+V[\x91Pa5\x9D\x82\x84a4\x89V[\x91P\x81\x90P\x95\x94PPPPPV[_` \x82\x01\x90Pa5\xBE_\x83\x01\x84a2\x80V[\x92\x91PPV[a5\xCD\x81a,\x9FV[\x81\x14a5\xD7W_\x80\xFD[PV[_\x81Q\x90Pa5\xE8\x81a5\xC4V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a6\x03Wa6\x02a,9V[[_a6\x10\x84\x82\x85\x01a5\xDAV[\x91PP\x92\x91PPV[_` \x82\x01\x90Pa6,_\x83\x01\x84a2qV[\x92\x91PPV[_\x82\x90P\x92\x91PPV[\x7FNH{q\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_R`\"`\x04R`$_\xFD[_`\x02\x82\x04\x90P`\x01\x82\x16\x80a6\x80W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a6\x93Wa6\x92a6=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05y\x91\x90a6\x07V[a\x05\xBAW3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x05\xB1\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[_a\x05\xC3a\x172V[\x90P\x80_\x01T\x88\x11\x80a\x05\xD5WP_\x88\x14[\x15a\x06\x17W\x87`@Q\x7FG\x11\x08?\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\x81R`\x04\x01a\x06\x0E\x91\x90a62V[`@Q\x80\x91\x03\x90\xFD[_\x81`\x01\x01_\x8A\x81R` \x01\x90\x81R` \x01_ `@Q\x80``\x01`@R\x90\x81_\x82\x01T\x81R` \x01`\x01\x82\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01`\x02\x82\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RPP\x90P_`@Q\x80`\xA0\x01`@R\x80\x8A\x8A\x80\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83` \x02\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81R` \x01\x83`@\x01Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x83` \x01Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x83_\x01Q\x81R` \x01\x86\x86\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPP\x81RP\x90P_a\x07\xD9\x82a\x18#V[\x90P_a\x08)\x82\x8A\x8A\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa\x18\xE2V[\x90Pa\x084\x81a\x19\x0CV[a\x08?\x8C3\x83a\x19\xDCV[_\x85`\x02\x01_\x8E\x81R` \x01\x90\x81R` \x01_ _\x84\x81R` \x01\x90\x81R` \x01_ \x90P\x80\x8A\x8A\x90\x91\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x92\x90\x91\x92\x90\x91\x92\x90\x91\x92P\x91\x82a\x08\x9D\x92\x91\x90a8OV[P`\x01\x86`\x05\x01_\x8F\x81R` \x01\x90\x81R` \x01_ _\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x85`\x03\x01_\x8E\x81R` \x01\x90\x81R` \x01_ _\x84\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x85`\x04\x01_\x8E\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\t\xBAWPa\t\xB9\x81\x80T\x90Pa\x1B/V[[\x15a\n?W`\x01\x86`\x04\x01_\x8F\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x82\x86`\x06\x01_\x8F\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x8C\x7F\xFE,CXW\x86\xA5\xA6X\xD2\xEC]\xF5\xDE\xA3\xFB3\x85\xB7|\x94\xF6\x0FrO\xF8\x10\x89oA\x985\x8D\x8D\x84`@Qa\n6\x93\x92\x91\x90a:\xE2V[`@Q\x80\x91\x03\x90\xA2[PPPPPPPPPPPPPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\n\x9B\x91\x90a5\xC4V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\n\xB6W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xDA\x91\x90a6\x07V[a\x0B\x1BW3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x0B\x12\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[_a\x0B$a\x172V[\x90P\x80_\x01T\x84\x11\x80a\x0B6WP_\x84\x14[\x15a\x0BxW\x83`@Q\x7FG\x11\x08?\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\x81R`\x04\x01a\x0Bo\x91\x90a62V[`@Q\x80\x91\x03\x90\xFD[_s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xEFi\x97\xF93`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0B\xC6\x91\x90a5\xC4V[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0B\xE0W=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0C\x08\x91\x90a=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x104\x91\x90a=FV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15\x80\x15a\x10\xAFWPs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x10\xF1W3`@Q\x7F\xE1\x91f\xEE\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\x81R`\x04\x01a\x10\xE8\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[a\x10\xF9a\x1C3V[V[a\x11\x03a\x1C\xA1V[a\x11\x0C\x82a\x1D\x87V[a\x11\x16\x82\x82a\x1EzV[PPV[_a\x11#a\x1F\x98V[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[_\x80a\x11Ua \x1FV[\x90P\x80_\x01_\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x90V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cF\xFB\xF6\x8E3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x11\xBA\x91\x90a5\xC4V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11\xD5W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11\xF9\x91\x90a6\x07V[\x15\x80\x15a\x12FWPs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x12\x88W3`@Q\x7F8\x89\x16\xBB\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\x81R`\x04\x01a\x12\x7F\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[a\x12\x90a FV[V[_``\x80_\x80_``_a\x12\xA4a \xB5V[\x90P_\x80\x1B\x81_\x01T\x14\x80\x15a\x12\xBFWP_\x80\x1B\x81`\x01\x01T\x14[a\x12\xFEW`@Q\x7F\x08\xC3y\xA0\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\x81R`\x04\x01a\x12\xF5\x90a=\xBBV[`@Q\x80\x91\x03\x90\xFD[a\x13\x06a \xDCV[a\x13\x0Ea!zV[F0_\x80\x1B_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x13-Wa\x13,a0\xA1V[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x13[W\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x7F\x0F\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\x95\x94\x93\x92\x91\x90\x97P\x97P\x97P\x97P\x97P\x97P\x97PP\x90\x91\x92\x93\x94\x95\x96V[\x86s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xBF\xF3\xAA\xBA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\xE9\x91\x90a62V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x14\x04W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x14(\x91\x90a6\x07V[a\x14iW\x80`@Q\x7F\xB6g\x9C;\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\x81R`\x04\x01a\x14`\x91\x90a62V[`@Q\x80\x91\x03\x90\xFD[a\x14qa\"\x18V[_a\x14za\x172V[\x90P\x80_\x01_\x81T\x80\x92\x91\x90a\x14\x8F\x90a<\xC4V[\x91\x90PUP_\x81_\x01T\x90P`@Q\x80``\x01`@R\x80\x8B\x81R` \x01\x8As\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x89s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RP\x82`\x01\x01_\x83\x81R` \x01\x90\x81R` \x01_ _\x82\x01Q\x81_\x01U` \x82\x01Q\x81`\x01\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`@\x82\x01Q\x81`\x02\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x90PP`\x01\x82`\x0B\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x89\x81\x7FJ\xE5Ojn\x90\r\x80o\xFA[\xB4n\xD9\x14YR=/j\xC9\xB5\xD6$\x04\xFE\xAB\x88v\x86\xD0\x05\x8B\x8B\x8B\x8B\x8B\x8B`@Qa\x15\xE0\x96\x95\x94\x93\x92\x91\x90a>\x15V[`@Q\x80\x91\x03\x90\xA3PPPPPPPPPPV[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[``_a\x168a\x172V[\x90P_\x81`\x06\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x03\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x82\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x16\xF0W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x16\xA7W[PPPPP\x92PPP\x91\x90PV[_\x80a\x17\x08a\x172V[\x90P\x80`\x04\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[_\x7FED\x16\\\xE1e2d\xFD\xCB\t\xB0)\x89\x1E=L\x8D\x85\x83Hh!\x17/\x88.\x19\xA1I\xA8\0\x90P\x90V[``_`\x01a\x17g\x84a\"YV[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17\x85Wa\x17\x84a0\xA1V[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x17\xB7W\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a\x18\x18W\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a\x18\rWa\x18\x0Ca>jV[[\x04\x94P_\x85\x03a\x17\xC4W[\x81\x93PPPP\x91\x90PV[_a\x18\xDB`@Q\x80`\xA0\x01`@R\x80`\x7F\x81R` \x01aB\xE4`\x7F\x919\x80Q\x90` \x01 \x83_\x01Q`@Q` \x01a\x18[\x91\x90a?HV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x84` \x01Q\x85`@\x01Q\x86``\x01Q\x87`\x80\x01Q`@Q` \x01a\x18\x95\x91\x90a?\xA2V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a\x18\xC0\x96\x95\x94\x93\x92\x91\x90a?\xB8V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a#\xAAV[\x90P\x91\x90PV[_\x80_\x80a\x18\xF0\x86\x86a#\xC3V[\x92P\x92P\x92Pa\x19\0\x82\x82a$\x18V[\x82\x93PPPP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c+\x10\x1C\x03\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x19Y\x91\x90a5\xC4V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x19tW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x19\x98\x91\x90a6\x07V[a\x19\xD9W\x80`@Q\x7F&\xCDu\xDC\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\x81R`\x04\x01a\x19\xD0\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[PV[_a\x19\xE5a\x172V[\x90P\x80`\x05\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x1A\x88W\x83\x83\x83`@Q\x7F\xF9\xEDC\x1F\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\x81R`\x04\x01a\x1A\x7F\x93\x92\x91\x90a@\x17V[`@Q\x80\x91\x03\x90\xFD[\x80`\t\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x1B)W\x83\x83\x83`@Q\x7F/\xA71t\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\x81R`\x04\x01a\x1B \x93\x92\x91\x90a@\x17V[`@Q\x80\x91\x03\x90\xFD[PPPPV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cg\x99\xEFR`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1B\x8EW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1B\xB2\x91\x90a@`V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[_a\x1B\xC9a\x1B\xE4V[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[a\x1C\x13a%zV[a\x1C\x1D\x82\x82a%\xBAV[PPV[a\x1C)a%zV[a\x1C1a&\x0BV[V[a\x1C;a&;V[_a\x1CDa \x1FV[\x90P_\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F]\xB9\xEE\nI[\xF2\xE6\xFF\x9C\x91\xA7\x83L\x1B\xA4\xFD\xD2D\xA5\xE8\xAANS{\xD3\x8A\xEA\xE4\xB0s\xAAa\x1C\x89a&{V[`@Qa\x1C\x96\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xA1PV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a\x1DNWP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x1D5a&\x82V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x1D\x85W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1D\xE4W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1E\x08\x91\x90a=FV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x1EwW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\x1En\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a\x1E\xE2WP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1E\xDF\x91\x90a@\xB5V[`\x01[a\x1F#W\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x1F\x1A\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a\x1F\x89W\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a\x1F\x80\x91\x90a27V[`@Q\x80\x91\x03\x90\xFD[a\x1F\x93\x83\x83a&\xD5V[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a \x1DW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x7F\xCD^\xD1\\n\x18~w\xE9\xAE\xE8\x81\x84\xC2\x1FO!\x82\xABX'\xCB;~\x07\xFB\xED\xCDc\xF03\0\x90P\x90V[a Na\"\x18V[_a Wa \x1FV[\x90P`\x01\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7Fb\xE7\x8C\xEA\x01\xBE\xE3 \xCDNB\x02p\xB5\xEAt\0\r\x11\xB0\xC9\xF7GT\xEB\xDB\xFCTK\x05\xA2Xa \x9Da&{V[`@Qa \xAA\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xA1PV[_\x7F\xA1jF\xD9Ba\xC7Q|\xC8\xFF\x89\xF6\x1C\x0C\xE95\x98\xE3\xC8I\x80\x10\x11\xDE\xE6I\xA6\xA5W\xD1\0\x90P\x90V[``_a \xE7a \xB5V[\x90P\x80`\x02\x01\x80Ta \xF8\x90a6\x82V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta!$\x90a6\x82V[\x80\x15a!oW\x80`\x1F\x10a!FWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a!oV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a!RW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[``_a!\x85a \xB5V[\x90P\x80`\x03\x01\x80Ta!\x96\x90a6\x82V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta!\xC2\x90a6\x82V[\x80\x15a\"\rW\x80`\x1F\x10a!\xE4Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\"\rV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a!\xF0W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[a\" a\x11KV[\x15a\"WW`@Q\x7F\xD9<\x06e\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a\"\xB5Wz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a\"\xABWa\"\xAAa>jV[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\"\xF2Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a\"\xE8Wa\"\xE7a>jV[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a#!Wf#\x86\xF2o\xC1\0\0\x83\x81a#\x17Wa#\x16a>jV[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a#JWc\x05\xF5\xE1\0\x83\x81a#@Wa#?a>jV[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a#oWa'\x10\x83\x81a#eWa#da>jV[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a#\x92W`d\x83\x81a#\x88Wa#\x87a>jV[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a#\xA1W`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[_a#\xBCa#\xB6a'GV[\x83a'UV[\x90P\x91\x90PV[_\x80_`A\x84Q\x03a$\x03W_\x80_` \x87\x01Q\x92P`@\x87\x01Q\x91P``\x87\x01Q_\x1A\x90Pa#\xF5\x88\x82\x85\x85a'\x95V[\x95P\x95P\x95PPPPa$\x11V[_`\x02\x85Q_\x1B\x92P\x92P\x92P[\x92P\x92P\x92V[_`\x03\x81\x11\x15a$+Wa$*a@\xE0V[[\x82`\x03\x81\x11\x15a$>Wa$=a@\xE0V[[\x03\x15a%vW`\x01`\x03\x81\x11\x15a$XWa$Wa@\xE0V[[\x82`\x03\x81\x11\x15a$kWa$ja@\xE0V[[\x03a$\xA2W`@Q\x7F\xF6E\xEE\xDF\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02`\x03\x81\x11\x15a$\xB6Wa$\xB5a@\xE0V[[\x82`\x03\x81\x11\x15a$\xC9Wa$\xC8a@\xE0V[[\x03a%\rW\x80_\x1C`@Q\x7F\xFC\xE6\x98\xF7\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\x81R`\x04\x01a%\x04\x91\x90a62V[`@Q\x80\x91\x03\x90\xFD[`\x03\x80\x81\x11\x15a% Wa%\x1Fa@\xE0V[[\x82`\x03\x81\x11\x15a%3Wa%2a@\xE0V[[\x03a%uW\x80`@Q\x7F\xD7\x8B\xCE\x0C\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\x81R`\x04\x01a%l\x91\x90a27V[`@Q\x80\x91\x03\x90\xFD[[PPV[a%\x82a(|V[a%\xB8W`@Q\x7F\xD7\xE6\xBC\xF8\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[a%\xC2a%zV[_a%\xCBa \xB5V[\x90P\x82\x81`\x02\x01\x90\x81a%\xDE\x91\x90aAeV[P\x81\x81`\x03\x01\x90\x81a%\xF0\x91\x90aAeV[P_\x80\x1B\x81_\x01\x81\x90UP_\x80\x1B\x81`\x01\x01\x81\x90UPPPPV[a&\x13a%zV[_a&\x1Ca \x1FV[\x90P_\x81_\x01_a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPPV[a&Ca\x11KV[a&yW`@Q\x7F\x8D\xFC +\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_3\x90P\x90V[_a&\xAE\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba(\x9AV[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a&\xDE\x82a(\xA3V[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a':Wa'4\x82\x82a)lV[Pa'CV[a'Ba)\xECV[[PPV[_a'Pa*(V[\x90P\x90V[_`@Q\x7F\x19\x01\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\x81R\x83`\x02\x82\x01R\x82`\"\x82\x01R`B\x81 \x91PP\x92\x91PPV[_\x80_\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF]WnsW\xA4P\x1D\xDF\xE9/Fh\x1B \xA0\x84_\x1C\x11\x15a'\xD1W_`\x03\x85\x92P\x92P\x92Pa(rV[_`\x01\x88\x88\x88\x88`@Q_\x81R` \x01`@R`@Qa'\xF4\x94\x93\x92\x91\x90aBOV[` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a(\x14W=_\x80>=_\xFD[PPP` `@Q\x03Q\x90P_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x03a(eW_`\x01_\x80\x1B\x93P\x93P\x93PPa(rV[\x80_\x80_\x1B\x93P\x93P\x93PP[\x94P\x94P\x94\x91PPV[_a(\x85a\x1B\xE4V[_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x90P\x90V[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a(\xFEW\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a(\xF5\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[\x80a)*\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba(\x9AV[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa)\x95\x91\x90a?\xA2V[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a)\xCDW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a)\xD2V[``\x91P[P\x91P\x91Pa)\xE2\x85\x83\x83a*\x8BV[\x92PPP\x92\x91PPV[_4\x11\x15a*&W`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0Fa*Ra+\x18V[a*Za+\x8EV[F0`@Q` \x01a*p\x95\x94\x93\x92\x91\x90aB\x92V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x90V[``\x82a*\xA0Wa*\x9B\x82a,\x05V[a+\x10V[_\x82Q\x14\x80\x15a*\xC6WP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a+\x08W\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a*\xFF\x91\x90a5\xC4V[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa+\x11V[[\x93\x92PPPV[_\x80a+\"a \xB5V[\x90P_a+-a \xDCV[\x90P_\x81Q\x11\x15a+IW\x80\x80Q\x90` \x01 \x92PPPa+\x8BV[_\x82_\x01T\x90P_\x80\x1B\x81\x14a+dW\x80\x93PPPPa+\x8BV[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x80a+\x98a \xB5V[\x90P_a+\xA3a!zV[\x90P_\x81Q\x11\x15a+\xBFW\x80\x80Q\x90` \x01 \x92PPPa,\x02V[_\x82`\x01\x01T\x90P_\x80\x1B\x81\x14a+\xDBW\x80\x93PPPPa,\x02V[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x81Q\x11\x15a,\x17W\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[a,l\x81a,ZV[\x81\x14a,vW_\x80\xFD[PV[_\x815\x90Pa,\x87\x81a,cV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a,\xA2Wa,\xA1a,RV[[_a,\xAF\x84\x82\x85\x01a,yV[\x91PP\x92\x91PPV[_\x81\x15\x15\x90P\x91\x90PV[a,\xCC\x81a,\xB8V[\x82RPPV[_` \x82\x01\x90Pa,\xE5_\x83\x01\x84a,\xC3V[\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15a-\"W\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa-\x07V[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a-G\x82a,\xEBV[a-Q\x81\x85a,\xF5V[\x93Pa-a\x81\x85` \x86\x01a-\x05V[a-j\x81a--V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra-\x8D\x81\x84a-=V[\x90P\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a-\xE7\x82a-\xBEV[\x90P\x91\x90PV[a-\xF7\x81a-\xDDV[\x82RPPV[_a.\x08\x83\x83a-\xEEV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a.*\x82a-\x95V[a.4\x81\x85a-\x9FV[\x93Pa.?\x83a-\xAFV[\x80_[\x83\x81\x10\x15a.oW\x81Qa.V\x88\x82a-\xFDV[\x97Pa.a\x83a.\x14V[\x92PP`\x01\x81\x01\x90Pa.BV[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra.\x94\x81\x84a. V[\x90P\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12a.\xBDWa.\xBCa.\x9CV[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a.\xDAWa.\xD9a.\xA0V[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15a.\xF6Wa.\xF5a.\xA4V[[\x92P\x92\x90PV[_\x80\x83`\x1F\x84\x01\x12a/\x12Wa/\x11a.\x9CV[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a//Wa/.a.\xA0V[[` \x83\x01\x91P\x83`\x01\x82\x02\x83\x01\x11\x15a/KWa/Ja.\xA4V[[\x92P\x92\x90PV[_\x80_\x80_\x80_`\x80\x88\x8A\x03\x12\x15a/mWa/la,RV[[_a/z\x8A\x82\x8B\x01a,yV[\x97PP` \x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a/\x9BWa/\x9Aa,VV[[a/\xA7\x8A\x82\x8B\x01a.\xA8V[\x96P\x96PP`@\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a/\xCAWa/\xC9a,VV[[a/\xD6\x8A\x82\x8B\x01a.\xFDV[\x94P\x94PP``\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a/\xF9Wa/\xF8a,VV[[a0\x05\x8A\x82\x8B\x01a.\xFDV[\x92P\x92PP\x92\x95\x98\x91\x94\x97P\x92\x95PV[_\x80_`@\x84\x86\x03\x12\x15a0-Wa0,a,RV[[_a0:\x86\x82\x87\x01a,yV[\x93PP` \x84\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a0[Wa0Za,VV[[a0g\x86\x82\x87\x01a.\xFDV[\x92P\x92PP\x92P\x92P\x92V[a0|\x81a-\xDDV[\x81\x14a0\x86W_\x80\xFD[PV[_\x815\x90Pa0\x97\x81a0sV[\x92\x91PPV[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[a0\xD7\x82a--V[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a0\xF6Wa0\xF5a0\xA1V[[\x80`@RPPPV[_a1\x08a,IV[\x90Pa1\x14\x82\x82a0\xCEV[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a13Wa12a0\xA1V[[a1<\x82a--V[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_a1ia1d\x84a1\x19V[a0\xFFV[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15a1\x85Wa1\x84a0\x9DV[[a1\x90\x84\x82\x85a1IV[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12a1\xACWa1\xABa.\x9CV[[\x815a1\xBC\x84\x82` \x86\x01a1WV[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a1\xDBWa1\xDAa,RV[[_a1\xE8\x85\x82\x86\x01a0\x89V[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a2\tWa2\x08a,VV[[a2\x15\x85\x82\x86\x01a1\x98V[\x91PP\x92P\x92\x90PV[_\x81\x90P\x91\x90PV[a21\x81a2\x1FV[\x82RPPV[_` \x82\x01\x90Pa2J_\x83\x01\x84a2(V[\x92\x91PPV[_\x7F\xFF\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\x82\x16\x90P\x91\x90PV[a2\x84\x81a2PV[\x82RPPV[a2\x93\x81a,ZV[\x82RPPV[a2\xA2\x81a-\xDDV[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a2\xDA\x81a,ZV[\x82RPPV[_a2\xEB\x83\x83a2\xD1V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a3\r\x82a2\xA8V[a3\x17\x81\x85a2\xB2V[\x93Pa3\"\x83a2\xC2V[\x80_[\x83\x81\x10\x15a3RW\x81Qa39\x88\x82a2\xE0V[\x97Pa3D\x83a2\xF7V[\x92PP`\x01\x81\x01\x90Pa3%V[P\x85\x93PPPP\x92\x91PPV[_`\xE0\x82\x01\x90Pa3r_\x83\x01\x8Aa2{V[\x81\x81\x03` \x83\x01Ra3\x84\x81\x89a-=V[\x90P\x81\x81\x03`@\x83\x01Ra3\x98\x81\x88a-=V[\x90Pa3\xA7``\x83\x01\x87a2\x8AV[a3\xB4`\x80\x83\x01\x86a2\x99V[a3\xC1`\xA0\x83\x01\x85a2(V[\x81\x81\x03`\xC0\x83\x01Ra3\xD3\x81\x84a3\x03V[\x90P\x98\x97PPPPPPPPV[_\x80_\x80_\x80_`\xA0\x88\x8A\x03\x12\x15a3\xFCWa3\xFBa,RV[[_a4\t\x8A\x82\x8B\x01a,yV[\x97PP` a4\x1A\x8A\x82\x8B\x01a0\x89V[\x96PP`@a4+\x8A\x82\x8B\x01a0\x89V[\x95PP``\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a4LWa4Ka,VV[[a4X\x8A\x82\x8B\x01a.\xFDV[\x94P\x94PP`\x80\x88\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a4{Wa4za,VV[[a4\x87\x8A\x82\x8B\x01a.\xFDV[\x92P\x92PP\x92\x95\x98\x91\x94\x97P\x92\x95PV[_\x81\x90P\x92\x91PPV[_a4\xAC\x82a,\xEBV[a4\xB6\x81\x85a4\x98V[\x93Pa4\xC6\x81\x85` \x86\x01a-\x05V[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_a5\x06`\x02\x83a4\x98V[\x91Pa5\x11\x82a4\xD2V[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_a5P`\x01\x83a4\x98V[\x91Pa5[\x82a5\x1CV[`\x01\x82\x01\x90P\x91\x90PV[_a5q\x82\x87a4\xA2V[\x91Pa5|\x82a4\xFAV[\x91Pa5\x88\x82\x86a4\xA2V[\x91Pa5\x93\x82a5DV[\x91Pa5\x9F\x82\x85a4\xA2V[\x91Pa5\xAA\x82a5DV[\x91Pa5\xB6\x82\x84a4\xA2V[\x91P\x81\x90P\x95\x94PPPPPV[_` \x82\x01\x90Pa5\xD7_\x83\x01\x84a2\x99V[\x92\x91PPV[a5\xE6\x81a,\xB8V[\x81\x14a5\xF0W_\x80\xFD[PV[_\x81Q\x90Pa6\x01\x81a5\xDDV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a6\x1CWa6\x1Ba,RV[[_a6)\x84\x82\x85\x01a5\xF3V[\x91PP\x92\x91PPV[_` \x82\x01\x90Pa6E_\x83\x01\x84a2\x8AV[\x92\x91PPV[_\x82\x90P\x92\x91PPV[\x7FNH{q\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_R`\"`\x04R`$_\xFD[_`\x02\x82\x04\x90P`\x01\x82\x16\x80a6\x99W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a6\xACWa6\xABa6UV[[P\x91\x90PV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_` `\x1F\x83\x01\x04\x90P\x91\x90PV[_\x82\x82\x1B\x90P\x92\x91PPV[_`\x08\x83\x02a7\x0E\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82a6\xD3V[a7\x18\x86\x83a6\xD3V[\x95P\x80\x19\x84\x16\x93P\x80\x86\x16\x84\x17\x92PPP\x93\x92PPPV[_\x81\x90P\x91\x90PV[_a7Sa7Na7I\x84a,ZV[a70V[a,ZV[\x90P\x91\x90PV[_\x81\x90P\x91\x90PV[a7l\x83a79V[a7\x80a7x\x82a7ZV[\x84\x84Ta6\xDFV[\x82UPPPPV[_\x90V[a7\x94a7\x88V[a7\x9F\x81\x84\x84a7cV[PPPV[[\x81\x81\x10\x15a7\xC2Wa7\xB7_\x82a7\x8CV[`\x01\x81\x01\x90Pa7\xA5V[PPV[`\x1F\x82\x11\x15a8\x07Wa7\xD8\x81a6\xB2V[a7\xE1\x84a6\xC4V[\x81\x01` \x85\x10\x15a7\xF0W\x81\x90P[a8\x04a7\xFC\x85a6\xC4V[\x83\x01\x82a7\xA4V[PP[PPPV[_\x82\x82\x1C\x90P\x92\x91PPV[_a8'_\x19\x84`\x08\x02a8\x0CV[\x19\x80\x83\x16\x91PP\x92\x91PPV[_a8?\x83\x83a8\x18V[\x91P\x82`\x02\x02\x82\x17\x90P\x92\x91PPV[a8Y\x83\x83a6KV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a8rWa8qa0\xA1V[[a8|\x82Ta6\x82V[a8\x87\x82\x82\x85a7\xC6V[_`\x1F\x83\x11`\x01\x81\x14a8\xB4W_\x84\x15a8\xA2W\x82\x87\x015\x90P[a8\xAC\x85\x82a84V[\x86UPa9\x13V[`\x1F\x19\x84\x16a8\xC2\x86a6\xB2V[_[\x82\x81\x10\x15a8\xE9W\x84\x89\x015\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90Pa8\xC4V[\x86\x83\x10\x15a9\x06W\x84\x89\x015a9\x02`\x1F\x89\x16\x82a8\x18V[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x80\xFD[\x82\x81\x837PPPV[_a9D\x83\x85a9\x1CV[\x93P\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x15a9wWa9va9,V[[` \x83\x02\x92Pa9\x88\x83\x85\x84a90V[\x82\x84\x01\x90P\x93\x92PPPV[_\x81T\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81Ta9\xDC\x81a6\x82V[a9\xE6\x81\x86a9\xC0V[\x94P`\x01\x82\x16_\x81\x14a:\0W`\x01\x81\x14a:\x16Wa:HV[`\xFF\x19\x83\x16\x86R\x81\x15\x15` \x02\x86\x01\x93Pa:HV[a:\x1F\x85a6\xB2V[_[\x83\x81\x10\x15a:@W\x81T\x81\x89\x01R`\x01\x82\x01\x91P` \x81\x01\x90Pa:!V[\x80\x88\x01\x95PPP[PPP\x92\x91PPV[_a:\\\x83\x83a9\xD0V[\x90P\x92\x91PPV[_`\x01\x82\x01\x90P\x91\x90PV[_a:z\x82a9\x94V[a:\x84\x81\x85a9\x9EV[\x93P\x83` \x82\x02\x85\x01a:\x96\x85a9\xAEV[\x80_[\x85\x81\x10\x15a:\xD0W\x84\x84\x03\x89R\x81a:\xB1\x85\x82a:QV[\x94Pa:\xBC\x83a:dV[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90Pa:\x99V[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_`@\x82\x01\x90P\x81\x81\x03_\x83\x01Ra:\xFB\x81\x85\x87a99V[\x90P\x81\x81\x03` \x83\x01Ra;\x0F\x81\x84a:pV[\x90P\x94\x93PPPPV[_\x80\xFD[_\x80\xFD[_\x81Q\x90Pa;/\x81a0sV[\x92\x91PPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a;OWa;Na0\xA1V[[a;X\x82a--V[\x90P` \x81\x01\x90P\x91\x90PV[_a;wa;r\x84a;5V[a0\xFFV[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15a;\x93Wa;\x92a0\x9DV[[a;\x9E\x84\x82\x85a-\x05V[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12a;\xBAWa;\xB9a.\x9CV[[\x81Qa;\xCA\x84\x82` \x86\x01a;eV[\x91PP\x92\x91PPV[_``\x82\x84\x03\x12\x15a;\xE8Wa;\xE7a;\x19V[[a;\xF2``a0\xFFV[\x90P_a<\x01\x84\x82\x85\x01a;!V[_\x83\x01RP` a<\x14\x84\x82\x85\x01a;!V[` \x83\x01RP`@\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a<8Wa<7a;\x1DV[[a\x01\x83\x85\x84a1IV[a>\n\x83a--V[\x84\x01\x90P\x93\x92PPPV[_`\x80\x82\x01\x90Pa>(_\x83\x01\x89a2\x99V[a>5` \x83\x01\x88a2\x99V[\x81\x81\x03`@\x83\x01Ra>H\x81\x86\x88a=\xE9V[\x90P\x81\x81\x03``\x83\x01Ra>]\x81\x84\x86a=\xE9V[\x90P\x97\x96PPPPPPPV[\x7FNH{q\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_R`\x12`\x04R`$_\xFD[_\x81Q\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a>\xC3\x81a2\x1FV[\x82RPPV[_a>\xD4\x83\x83a>\xBAV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a>\xF6\x82a>\x97V[a?\0\x81\x85a>\xA1V[\x93Pa?\x0B\x83a>\xABV[\x80_[\x83\x81\x10\x15a?;W\x81Qa?\"\x88\x82a>\xC9V[\x97Pa?-\x83a>\xE0V[\x92PP`\x01\x81\x01\x90Pa?\x0EV[P\x85\x93PPPP\x92\x91PPV[_a?S\x82\x84a>\xECV[\x91P\x81\x90P\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[_a?|\x82a?^V[a?\x86\x81\x85a?hV[\x93Pa?\x96\x81\x85` \x86\x01a-\x05V[\x80\x84\x01\x91PP\x92\x91PPV[_a?\xAD\x82\x84a?rV[\x91P\x81\x90P\x92\x91PPV[_`\xC0\x82\x01\x90Pa?\xCB_\x83\x01\x89a2(V[a?\xD8` \x83\x01\x88a2(V[a?\xE5`@\x83\x01\x87a2\x99V[a?\xF2``\x83\x01\x86a2\x99V[a?\xFF`\x80\x83\x01\x85a2\x8AV[a@\x0C`\xA0\x83\x01\x84a2(V[\x97\x96PPPPPPPV[_``\x82\x01\x90Pa@*_\x83\x01\x86a2\x8AV[a@7` \x83\x01\x85a2\x99V[a@D`@\x83\x01\x84a2\x99V[\x94\x93PPPPV[_\x81Q\x90Pa@Z\x81a,cV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a@uWa@ta,RV[[_a@\x82\x84\x82\x85\x01a@LV[\x91PP\x92\x91PPV[a@\x94\x81a2\x1FV[\x81\x14a@\x9EW_\x80\xFD[PV[_\x81Q\x90Pa@\xAF\x81a@\x8BV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a@\xCAWa@\xC9a,RV[[_a@\xD7\x84\x82\x85\x01a@\xA1V[\x91PP\x92\x91PPV[\x7FNH{q\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_R`!`\x04R`$_\xFD[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[`\x1F\x82\x11\x15aA`WaA1\x81aA\rV[aA:\x84a6\xC4V[\x81\x01` \x85\x10\x15aAIW\x81\x90P[aA]aAU\x85a6\xC4V[\x83\x01\x82a7\xA4V[PP[PPPV[aAn\x82a,\xEBV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aA\x87WaA\x86a0\xA1V[[aA\x91\x82Ta6\x82V[aA\x9C\x82\x82\x85aA\x1FV[_` \x90P`\x1F\x83\x11`\x01\x81\x14aA\xCDW_\x84\x15aA\xBBW\x82\x87\x01Q\x90P[aA\xC5\x85\x82a84V[\x86UPaB,V[`\x1F\x19\x84\x16aA\xDB\x86aA\rV[_[\x82\x81\x10\x15aB\x02W\x84\x89\x01Q\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90PaA\xDDV[\x86\x83\x10\x15aB\x1FW\x84\x89\x01QaB\x1B`\x1F\x89\x16\x82a8\x18V[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPV[_`\xFF\x82\x16\x90P\x91\x90PV[aBI\x81aB4V[\x82RPPV[_`\x80\x82\x01\x90PaBb_\x83\x01\x87a2(V[aBo` \x83\x01\x86aB@V[aB|`@\x83\x01\x85a2(V[aB\x89``\x83\x01\x84a2(V[\x95\x94PPPPPV[_`\xA0\x82\x01\x90PaB\xA5_\x83\x01\x88a2(V[aB\xB2` \x83\x01\x87a2(V[aB\xBF`@\x83\x01\x86a2(V[aB\xCC``\x83\x01\x85a2\x8AV[aB\xD9`\x80\x83\x01\x84a2\x99V[\x96\x95PPPPPPV\xFECiphertextVerification(bytes32[] ctHandles,address userAddress,address contractAddress,uint256 contractChainId,bytes extraData)", ); #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] diff --git a/gateway-contracts/rust_bindings/src/kms_generation.rs b/gateway-contracts/rust_bindings/src/kms_generation.rs index 033111252..e057ba86f 100644 --- a/gateway-contracts/rust_bindings/src/kms_generation.rs +++ b/gateway-contracts/rust_bindings/src/kms_generation.rs @@ -1496,22 +1496,22 @@ pub mod KMSGeneration { /// The creation / init bytecode of the contract. /// /// ```text - ///0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801562000043575f80fd5b50620000546200005a60201b60201c565b620001c4565b5f6200006b6200015e60201b60201c565b9050805f0160089054906101000a900460ff1615620000b6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146200015b5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051620001529190620001a9565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b620001a38162000185565b82525050565b5f602082019050620001be5f83018462000198565b92915050565b6080516151d9620001eb5f395f8181612383015281816123d8015261267a01526151d95ff3fe608060405260043610610108575f3560e01c8063589adb0e11610094578063ad3cb1cc11610063578063ad3cb1cc14610353578063baff211e1461037d578063c55b8724146103a7578063caa367db146103e4578063d52f10eb1461040c57610108565b8063589adb0e1461029657806362978787146102be57806384b0196e146102e6578063936608ae1461031657610108565b80633c02f834116100db5780633c02f834146101c457806345af261b146101ec5780634610ffe8146102285780634f1ef2861461025057806352d1902d1461026c57610108565b80630d8e6e2c1461010c57806316c713d91461013657806319f4f6321461017257806339f73810146101ae575b5f80fd5b348015610117575f80fd5b50610120610436565b60405161012d919061343e565b60405180910390f35b348015610141575f80fd5b5061015c600480360381019061015791906134a2565b6104b1565b60405161016991906135b4565b60405180910390f35b34801561017d575f80fd5b50610198600480360381019061019391906134a2565b610582565b6040516101a59190613647565b60405180910390f35b3480156101b9575f80fd5b506101c261062f565b005b3480156101cf575f80fd5b506101ea60048036038101906101e59190613683565b61087e565b005b3480156101f7575f80fd5b50610212600480360381019061020d91906134a2565b610a2d565b60405161021f9190613647565b60405180910390f35b348015610233575f80fd5b5061024e60048036038101906102499190613777565b610ac2565b005b61026a6004803603810190610265919061395a565b610e33565b005b348015610277575f80fd5b50610280610e52565b60405161028d91906139cc565b60405180910390f35b3480156102a1575f80fd5b506102bc60048036038101906102b791906139e5565b610e83565b005b3480156102c9575f80fd5b506102e460048036038101906102df9190613a42565b6111d5565b005b3480156102f1575f80fd5b506102fa6114e2565b60405161030d9796959493929190613be2565b60405180910390f35b348015610321575f80fd5b5061033c600480360381019061033791906134a2565b6115eb565b60405161034a929190613ef4565b60405180910390f35b34801561035e575f80fd5b5061036761189e565b604051610374919061343e565b60405180910390f35b348015610388575f80fd5b506103916118d7565b60405161039e9190613f29565b60405180910390f35b3480156103b2575f80fd5b506103cd60048036038101906103c891906134a2565b6118ee565b6040516103db929190613f8a565b60405180910390f35b3480156103ef575f80fd5b5061040a60048036038101906104059190613fbf565b611b0c565b005b348015610417575f80fd5b50610420611cf6565b60405161042d9190613f29565b60405180910390f35b60606040518060400160405280600d81526020017f4b4d5347656e65726174696f6e000000000000000000000000000000000000008152506104775f611d0d565b6104816001611d0d565b61048a5f611d0d565b60405160200161049d94939291906140b8565b604051602081830303815290604052905090565b60605f6104bc611dd7565b90505f816004015f8581526020019081526020015f20549050816002015f8581526020019081526020015f205f8281526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561057457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161052b575b505050505092505050919050565b5f8061058c611dd7565b9050806001015f8481526020019081526020015f205f9054906101000a900460ff166105ef57826040517f84de13310000000000000000000000000000000000000000000000000000000081526004016105e69190613f29565b60405180910390fd5b5f816007015f8581526020019081526020015f2054905081600e015f8281526020019081526020015f205f9054906101000a900460ff1692505050919050565b6001610639611dfe565b67ffffffffffffffff161461067a576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f610685611e22565b9050805f0160089054906101000a900460ff16806106cd57508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b15610704576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff0219169083151502179055506107bd6040518060400160405280600d81526020017f4b4d5347656e65726174696f6e000000000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250611e49565b5f6107c6611dd7565b905060f8600360058111156107de576107dd6135d4565b5b901b816005018190555060f8600460058111156107fe576107fd6135d4565b5b901b816006018190555060f860058081111561081d5761081c6135d4565b5b901b81600a0181905550505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2826040516108729190614138565b60405180910390a15050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ff9190614165565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461096e57336040517f0e56cf3d0000000000000000000000000000000000000000000000000000000081526004016109659190614190565b60405180910390fd5b5f610977611dd7565b905080600a015f81548092919061098d906141d6565b91905055505f81600a015490508382600b015f8381526020019081526020015f20819055508282600e015f8381526020019081526020015f205f6101000a81548160ff021916908360018111156109e7576109e66135d4565b5b02179055507f3f038f6f88cb3031b7718588403a2ec220576a868be07dde4c02b846ca352ef5818585604051610a1f9392919061421d565b60405180910390a150505050565b5f80610a37611dd7565b9050806001015f8481526020019081526020015f205f9054906101000a900460ff16610a9a57826040517fda32d00f000000000000000000000000000000000000000000000000000000008152600401610a919190613f29565b60405180910390fd5b80600e015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b8152600401610b0f9190614190565b602060405180830381865afa158015610b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4e9190614287565b610b8f57336040517faee86323000000000000000000000000000000000000000000000000000000008152600401610b869190614190565b60405180910390fd5b5f610b98611dd7565b90505f816007015f8881526020019081526020015f205490505f610bbe82898989611e5f565b90505f610bcc828787612036565b9050835f015f8a81526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610c6c5788816040517f98fb957d000000000000000000000000000000000000000000000000000000008152600401610c639291906142b2565b60405180910390fd5b6001845f015f8b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f610cdc8a8461209b565b9050846001015f8b81526020019081526020015f205f9054906101000a900460ff16158015610d115750610d1081516122f0565b5b15610e27576001856001015f8c81526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b89899050811015610dc757856008015f8c81526020019081526020015f208a8a83818110610d7457610d736142d9565b5b9050602002810190610d869190614312565b908060018154018082558091505060019003905f5260205f2090600202015f909190919091508181610db8919061474e565b50508080600101915050610d43565b5082856004015f8c81526020019081526020015f20819055508985600901819055507feb85c26dbcad46b80a68a0f24cce7c2c90f0a1faded84184138839fc9e80a25b8a828b8b604051610e1e949392919061492d565b60405180910390a15b50505050505050505050565b610e3b612381565b610e4482612467565b610e4e828261255a565b5050565b5f610e5b612678565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b8152600401610ed09190614190565b602060405180830381865afa158015610eeb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f0f9190614287565b610f5057336040517faee86323000000000000000000000000000000000000000000000000000000008152600401610f479190614190565b60405180910390fd5b5f610f59611dd7565b90505f610f65856126ff565b90505f610f73828686612036565b9050825f015f8781526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156110135785816040517f33ca1fe300000000000000000000000000000000000000000000000000000000815260040161100a9291906142b2565b60405180910390fd5b6001835f015f8881526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f836002015f8881526020019081526020015f205f8481526020019081526020015f2090508033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836001015f8881526020019081526020015f205f9054906101000a900460ff16158015611132575061113181805490506122f0565b5b156111cc576001846001015f8981526020019081526020015f205f6101000a81548160ff02191690831515021790555082846004015f8981526020019081526020015f20819055505f846007015f8981526020019081526020015f205490507f78b179176d1f19d7c28e80823deba2624da2ca2ec64b1701f3632a87c9aedc9288826040516111c2929190614972565b60405180910390a1505b50505050505050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b81526004016112229190614190565b602060405180830381865afa15801561123d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112619190614287565b6112a257336040517faee863230000000000000000000000000000000000000000000000000000000081526004016112999190614190565b60405180910390fd5b5f6112ab611dd7565b90505f81600b015f8881526020019081526020015f205490505f6112d188838989612757565b90505f6112df828787612036565b9050835f015f8a81526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561137f5788816040517ffcf5a6e90000000000000000000000000000000000000000000000000000000081526004016113769291906142b2565b60405180910390fd5b6001845f015f8b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f6113ef8a8461209b565b9050846001015f8b81526020019081526020015f205f9054906101000a900460ff16158015611424575061142381516122f0565b5b156114d6576001856001015f8c81526020019081526020015f205f6101000a81548160ff021916908315150217905550888886600c015f8d81526020019081526020015f20918261147692919061462d565b5082856004015f8c81526020019081526020015f20819055508985600d01819055507f2258b73faed33fb2e2ea454403bef974920caf682ab3a723484fcf67553b16a28a828b8b6040516114cd94939291906149c5565b60405180910390a15b50505050505050505050565b5f6060805f805f60605f6114f46127de565b90505f801b815f015414801561150f57505f801b8160010154145b61154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154590614a54565b60405180910390fd5b611556612805565b61155e6128a3565b46305f801b5f67ffffffffffffffff81111561157d5761157c613836565b5b6040519080825280602002602001820160405280156115ab5781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b6060805f6115f7611dd7565b9050806001015f8581526020019081526020015f205f9054906101000a900460ff1661165a57836040517f84de13310000000000000000000000000000000000000000000000000000000081526004016116519190613f29565b60405180910390fd5b5f816004015f8681526020019081526020015f20549050816003015f8681526020019081526020015f205f8281526020019081526020015f20826008015f8781526020019081526020015f2081805480602002602001604051908101604052809291908181526020015f905b8282101561176e578382905f5260205f200180546116e390614460565b80601f016020809104026020016040519081016040528092919081815260200182805461170f90614460565b801561175a5780601f106117315761010080835404028352916020019161175a565b820191905f5260205f20905b81548152906001019060200180831161173d57829003601f168201915b5050505050815260200190600101906116c6565b50505050915080805480602002602001604051908101604052809291908181526020015f905b8282101561188d578382905f5260205f2090600202016040518060400160405290815f82015f9054906101000a900460ff1660018111156117d8576117d76135d4565b5b60018111156117ea576117e96135d4565b5b81526020016001820180546117fe90614460565b80601f016020809104026020016040519081016040528092919081815260200182805461182a90614460565b80156118755780601f1061184c57610100808354040283529160200191611875565b820191905f5260205f20905b81548152906001019060200180831161185857829003601f168201915b50505050508152505081526020019060010190611794565b505050509050935093505050915091565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b5f806118e1611dd7565b905080600d015491505090565b6060805f6118fa611dd7565b9050806001015f8581526020019081526020015f205f9054906101000a900460ff1661195d57836040517fda32d00f0000000000000000000000000000000000000000000000000000000081526004016119549190613f29565b60405180910390fd5b5f816004015f8681526020019081526020015f20549050816003015f8681526020019081526020015f205f8281526020019081526020015f2082600c015f8781526020019081526020015f2081805480602002602001604051908101604052809291908181526020015f905b82821015611a71578382905f5260205f200180546119e690614460565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1290614460565b8015611a5d5780601f10611a3457610100808354040283529160200191611a5d565b820191905f5260205f20905b815481529060010190602001808311611a4057829003601f168201915b5050505050815260200190600101906119c9565b505050509150808054611a8390614460565b80601f0160208091040260200160405190810160405280929190818152602001828054611aaf90614460565b8015611afa5780601f10611ad157610100808354040283529160200191611afa565b820191905f5260205f20905b815481529060010190602001808311611add57829003601f168201915b50505050509050935093505050915091565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8d9190614165565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bfc57336040517f0e56cf3d000000000000000000000000000000000000000000000000000000008152600401611bf39190614190565b60405180910390fd5b5f611c05611dd7565b9050806005015f815480929190611c1b906141d6565b91905055505f81600501549050816006015f815480929190611c3c906141d6565b91905055505f8260060154905080836007015f8481526020019081526020015f208190555081836007015f8381526020019081526020015f20819055505f8484600e015f8581526020019081526020015f205f6101000a81548160ff02191690836001811115611caf57611cae6135d4565b5b02179055507f02024007d96574dbc9d11328bfee9893e7c7bb4ef4aa806df33bfdf454eb5e60838287604051611ce79392919061421d565b60405180910390a15050505050565b5f80611d00611dd7565b9050806009015491505090565b60605f6001611d1b84612941565b0190505f8167ffffffffffffffff811115611d3957611d38613836565b5b6040519080825280601f01601f191660200182016040528015611d6b5781602001600182028036833780820191505090505b5090505f82602001820190505b600115611dcc578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611dc157611dc0614a72565b5b0494505f8503611d78575b819350505050919050565b5f7f0b8fdb1f0a6356dd20a6cbc6f9668fac23b85f96575d10e333e603faa794ac00905090565b5f611e07611e22565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b611e51612a92565b611e5b8282612ad2565b5050565b5f808383905067ffffffffffffffff811115611e7e57611e7d613836565b5b604051908082528060200260200182016040528015611eac5781602001602082028036833780820191505090505b5090505f5b84849050811015611fb0576040518060600160405280602581526020016151b46025913980519060200120858583818110611eef57611eee6142d9565b5b9050602002810190611f019190614312565b5f016020810190611f129190614a9f565b868684818110611f2557611f246142d9565b5b9050602002810190611f379190614312565b8060200190611f4691906143c7565b604051611f54929190614af8565b6040518091039020604051602001611f6e93929190614b1f565b60405160208183030381529060405280519060200120828281518110611f9757611f966142d9565b5b6020026020010181815250508080600101915050611eb1565b5061202b6040518060a00160405280607281526020016151426072913980519060200120878784604051602001611fe79190614c05565b604051602081830303815290604052805190602001206040516020016120109493929190614c1b565b60405160208183030381529060405280519060200120612b23565b915050949350505050565b5f806120858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050612b3c565b905061209081612b66565b809150509392505050565b60605f6120a6611dd7565b90505f73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e3b2a874336040518263ffffffff1660e01b81526004016120f69190614190565b5f60405180830381865afa158015612110573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906121389190614db1565b6060015190505f826002015f8781526020019081526020015f205f8681526020019081526020015f2090508033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f836003015f8881526020019081526020015f205f8781526020019081526020015f2090508083908060018154018082558091505060019003905f5260205f20015f9091909190915090816122179190614e50565b5080805480602002602001604051908101604052809291908181526020015f905b828210156122e0578382905f5260205f2001805461225590614460565b80601f016020809104026020016040519081016040528092919081815260200182805461228190614460565b80156122cc5780601f106122a3576101008083540402835291602001916122cc565b820191905f5260205f20905b8154815290600101906020018083116122af57829003601f168201915b505050505081526020019060010190612238565b5050505094505050505092915050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663b4722bc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561234f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123739190614f33565b905080831015915050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061242e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612415612c36565b73ffffffffffffffffffffffffffffffffffffffff1614155b15612465576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124e89190614165565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461255757336040517f0e56cf3d00000000000000000000000000000000000000000000000000000000815260040161254e9190614190565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156125c257506040513d601f19601f820116820180604052508101906125bf9190614f88565b60015b61260357816040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016125fa9190614190565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461266957806040517faa1d49a400000000000000000000000000000000000000000000000000000000815260040161266091906139cc565b60405180910390fd5b6126738383612c89565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146126fd576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f6127506040518060600160405280602c8152602001615116602c91398051906020012083604051602001612735929190614fb3565b60405160208183030381529060405280519060200120612b23565b9050919050565b5f6127d46040518060800160405280604681526020016150d0604691398051906020012086868686604051602001612790929190614af8565b604051602081830303815290604052805190602001206040516020016127b99493929190614c1b565b60405160208183030381529060405280519060200120612b23565b9050949350505050565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f6128106127de565b905080600201805461282190614460565b80601f016020809104026020016040519081016040528092919081815260200182805461284d90614460565b80156128985780601f1061286f57610100808354040283529160200191612898565b820191905f5260205f20905b81548152906001019060200180831161287b57829003601f168201915b505050505091505090565b60605f6128ae6127de565b90508060030180546128bf90614460565b80601f01602080910402602001604051908101604052809291908181526020018280546128eb90614460565b80156129365780601f1061290d57610100808354040283529160200191612936565b820191905f5260205f20905b81548152906001019060200180831161291957829003601f168201915b505050505091505090565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061299d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161299357612992614a72565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106129da576d04ee2d6d415b85acef810000000083816129d0576129cf614a72565b5b0492506020810190505b662386f26fc100008310612a0957662386f26fc1000083816129ff576129fe614a72565b5b0492506010810190505b6305f5e1008310612a32576305f5e1008381612a2857612a27614a72565b5b0492506008810190505b6127108310612a57576127108381612a4d57612a4c614a72565b5b0492506004810190505b60648310612a7a5760648381612a7057612a6f614a72565b5b0492506002810190505b600a8310612a89576001810190505b80915050919050565b612a9a612cfb565b612ad0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b612ada612a92565b5f612ae36127de565b905082816002019081612af69190614e50565b5081816003019081612b089190614e50565b505f801b815f01819055505f801b8160010181905550505050565b5f612b35612b2f612d19565b83612d27565b9050919050565b5f805f80612b4a8686612d67565b925092509250612b5a8282612dbc565b82935050505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663203d0114826040518263ffffffff1660e01b8152600401612bb39190614190565b602060405180830381865afa158015612bce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bf29190614287565b612c3357806040517f2a7c6ef6000000000000000000000000000000000000000000000000000000008152600401612c2a9190614190565b60405180910390fd5b50565b5f612c627f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b612f1e565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612c9282612f27565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f81511115612cee57612ce88282612ff0565b50612cf7565b612cf6613070565b5b5050565b5f612d04611e22565b5f0160089054906101000a900460ff16905090565b5f612d226130ac565b905090565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f6041845103612da7575f805f602087015192506040870151915060608701515f1a9050612d998882858561310f565b955095509550505050612db5565b5f600285515f1b9250925092505b9250925092565b5f6003811115612dcf57612dce6135d4565b5b826003811115612de257612de16135d4565b5b0315612f1a5760016003811115612dfc57612dfb6135d4565b5b826003811115612e0f57612e0e6135d4565b5b03612e46576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115612e5a57612e596135d4565b5b826003811115612e6d57612e6c6135d4565b5b03612eb157805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401612ea89190613f29565b60405180910390fd5b600380811115612ec457612ec36135d4565b5b826003811115612ed757612ed66135d4565b5b03612f1957806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401612f1091906139cc565b60405180910390fd5b5b5050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b03612f8257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401612f799190614190565b60405180910390fd5b80612fae7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b612f1e565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff1684604051613019919061500a565b5f60405180830381855af49150503d805f8114613051576040519150601f19603f3d011682016040523d82523d5f602084013e613056565b606091505b50915091506130668583836131f6565b9250505092915050565b5f3411156130aa576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6130d6613283565b6130de6132f9565b46306040516020016130f4959493929190615020565b60405160208183030381529060405280519060200120905090565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c111561314b575f6003859250925092506131ec565b5f6001888888886040515f815260200160405260405161316e949392919061508c565b6020604051602081039080840390855afa15801561318e573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036131df575f60015f801b935093509350506131ec565b805f805f1b935093509350505b9450945094915050565b60608261320b5761320682613370565b61327b565b5f825114801561323157505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561327357836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161326a9190614190565b60405180910390fd5b81905061327c565b5b9392505050565b5f8061328d6127de565b90505f613298612805565b90505f815111156132b4578080519060200120925050506132f6565b5f825f015490505f801b81146132cf578093505050506132f6565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f806133036127de565b90505f61330e6128a3565b90505f8151111561332a5780805190602001209250505061336d565b5f826001015490505f801b81146133465780935050505061336d565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f815111156133825780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156133eb5780820151818401526020810190506133d0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613410826133b4565b61341a81856133be565b935061342a8185602086016133ce565b613433816133f6565b840191505092915050565b5f6020820190508181035f8301526134568184613406565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6134818161346f565b811461348b575f80fd5b50565b5f8135905061349c81613478565b92915050565b5f602082840312156134b7576134b6613467565b5b5f6134c48482850161348e565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61351f826134f6565b9050919050565b61352f81613515565b82525050565b5f6135408383613526565b60208301905092915050565b5f602082019050919050565b5f613562826134cd565b61356c81856134d7565b9350613577836134e7565b805f5b838110156135a757815161358e8882613535565b97506135998361354c565b92505060018101905061357a565b5085935050505092915050565b5f6020820190508181035f8301526135cc8184613558565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110613612576136116135d4565b5b50565b5f81905061362282613601565b919050565b5f61363182613615565b9050919050565b61364181613627565b82525050565b5f60208201905061365a5f830184613638565b92915050565b6002811061366c575f80fd5b50565b5f8135905061367d81613660565b92915050565b5f806040838503121561369957613698613467565b5b5f6136a68582860161348e565b92505060206136b78582860161366f565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126136e2576136e16136c1565b5b8235905067ffffffffffffffff8111156136ff576136fe6136c5565b5b60208301915083602082028301111561371b5761371a6136c9565b5b9250929050565b5f8083601f840112613737576137366136c1565b5b8235905067ffffffffffffffff811115613754576137536136c5565b5b6020830191508360018202830111156137705761376f6136c9565b5b9250929050565b5f805f805f606086880312156137905761378f613467565b5b5f61379d8882890161348e565b955050602086013567ffffffffffffffff8111156137be576137bd61346b565b5b6137ca888289016136cd565b9450945050604086013567ffffffffffffffff8111156137ed576137ec61346b565b5b6137f988828901613722565b92509250509295509295909350565b61381181613515565b811461381b575f80fd5b50565b5f8135905061382c81613808565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61386c826133f6565b810181811067ffffffffffffffff8211171561388b5761388a613836565b5b80604052505050565b5f61389d61345e565b90506138a98282613863565b919050565b5f67ffffffffffffffff8211156138c8576138c7613836565b5b6138d1826133f6565b9050602081019050919050565b828183375f83830152505050565b5f6138fe6138f9846138ae565b613894565b90508281526020810184848401111561391a57613919613832565b5b6139258482856138de565b509392505050565b5f82601f830112613941576139406136c1565b5b81356139518482602086016138ec565b91505092915050565b5f80604083850312156139705761396f613467565b5b5f61397d8582860161381e565b925050602083013567ffffffffffffffff81111561399e5761399d61346b565b5b6139aa8582860161392d565b9150509250929050565b5f819050919050565b6139c6816139b4565b82525050565b5f6020820190506139df5f8301846139bd565b92915050565b5f805f604084860312156139fc576139fb613467565b5b5f613a098682870161348e565b935050602084013567ffffffffffffffff811115613a2a57613a2961346b565b5b613a3686828701613722565b92509250509250925092565b5f805f805f60608688031215613a5b57613a5a613467565b5b5f613a688882890161348e565b955050602086013567ffffffffffffffff811115613a8957613a8861346b565b5b613a9588828901613722565b9450945050604086013567ffffffffffffffff811115613ab857613ab761346b565b5b613ac488828901613722565b92509250509295509295909350565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b613b0781613ad3565b82525050565b613b168161346f565b82525050565b613b2581613515565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613b5d8161346f565b82525050565b5f613b6e8383613b54565b60208301905092915050565b5f602082019050919050565b5f613b9082613b2b565b613b9a8185613b35565b9350613ba583613b45565b805f5b83811015613bd5578151613bbc8882613b63565b9750613bc783613b7a565b925050600181019050613ba8565b5085935050505092915050565b5f60e082019050613bf55f83018a613afe565b8181036020830152613c078189613406565b90508181036040830152613c1b8188613406565b9050613c2a6060830187613b0d565b613c376080830186613b1c565b613c4460a08301856139bd565b81810360c0830152613c568184613b86565b905098975050505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f613ca7826133b4565b613cb18185613c8d565b9350613cc18185602086016133ce565b613cca816133f6565b840191505092915050565b5f613ce08383613c9d565b905092915050565b5f602082019050919050565b5f613cfe82613c64565b613d088185613c6e565b935083602082028501613d1a85613c7e565b805f5b85811015613d555784840389528151613d368582613cd5565b9450613d4183613ce8565b925060208a01995050600181019050613d1d565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b60028110613da157613da06135d4565b5b50565b5f819050613db182613d90565b919050565b5f613dc082613da4565b9050919050565b613dd081613db6565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f613dfa82613dd6565b613e048185613de0565b9350613e148185602086016133ce565b613e1d816133f6565b840191505092915050565b5f604083015f830151613e3d5f860182613dc7565b5060208301518482036020860152613e558282613df0565b9150508091505092915050565b5f613e6d8383613e28565b905092915050565b5f602082019050919050565b5f613e8b82613d67565b613e958185613d71565b935083602082028501613ea785613d81565b805f5b85811015613ee25784840389528151613ec38582613e62565b9450613ece83613e75565b925060208a01995050600181019050613eaa565b50829750879550505050505092915050565b5f6040820190508181035f830152613f0c8185613cf4565b90508181036020830152613f208184613e81565b90509392505050565b5f602082019050613f3c5f830184613b0d565b92915050565b5f82825260208201905092915050565b5f613f5c82613dd6565b613f668185613f42565b9350613f768185602086016133ce565b613f7f816133f6565b840191505092915050565b5f6040820190508181035f830152613fa28185613cf4565b90508181036020830152613fb68184613f52565b90509392505050565b5f60208284031215613fd457613fd3613467565b5b5f613fe18482850161366f565b91505092915050565b5f81905092915050565b5f613ffe826133b4565b6140088185613fea565b93506140188185602086016133ce565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f614058600283613fea565b915061406382614024565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6140a2600183613fea565b91506140ad8261406e565b600182019050919050565b5f6140c38287613ff4565b91506140ce8261404c565b91506140da8286613ff4565b91506140e582614096565b91506140f18285613ff4565b91506140fc82614096565b91506141088284613ff4565b915081905095945050505050565b5f67ffffffffffffffff82169050919050565b61413281614116565b82525050565b5f60208201905061414b5f830184614129565b92915050565b5f8151905061415f81613808565b92915050565b5f6020828403121561417a57614179613467565b5b5f61418784828501614151565b91505092915050565b5f6020820190506141a35f830184613b1c565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6141e08261346f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614212576142116141a9565b5b600182019050919050565b5f6060820190506142305f830186613b0d565b61423d6020830185613b0d565b61424a6040830184613638565b949350505050565b5f8115159050919050565b61426681614252565b8114614270575f80fd5b50565b5f815190506142818161425d565b92915050565b5f6020828403121561429c5761429b613467565b5b5f6142a984828501614273565b91505092915050565b5f6040820190506142c55f830185613b0d565b6142d26020830184613b1c565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f80fd5b5f80fd5b5f80fd5b5f8235600160400383360303811261432d5761432c614306565b5b80830191505092915050565b60028110614345575f80fd5b50565b5f813561435481614339565b80915050919050565b5f815f1b9050919050565b5f60ff6143748461435d565b9350801983169250808416831791505092915050565b5f61439482613da4565b9050919050565b5f819050919050565b6143ad8261438a565b6143c06143b98261439b565b8354614368565b8255505050565b5f80833560016020038436030381126143e3576143e2614306565b5b80840192508235915067ffffffffffffffff8211156144055761440461430a565b5b6020830192506001820236038313156144215761442061430e565b5b509250929050565b5f82905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061447757607f821691505b60208210810361448a57614489614433565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026144ec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826144b1565b6144f686836144b1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61453161452c6145278461346f565b61450e565b61346f565b9050919050565b5f819050919050565b61454a83614517565b61455e61455682614538565b8484546144bd565b825550505050565b5f90565b614572614566565b61457d818484614541565b505050565b5b818110156145a0576145955f8261456a565b600181019050614583565b5050565b601f8211156145e5576145b681614490565b6145bf846144a2565b810160208510156145ce578190505b6145e26145da856144a2565b830182614582565b50505b505050565b5f82821c905092915050565b5f6146055f19846008026145ea565b1980831691505092915050565b5f61461d83836145f6565b9150826002028217905092915050565b6146378383614429565b67ffffffffffffffff8111156146505761464f613836565b5b61465a8254614460565b6146658282856145a4565b5f601f831160018114614692575f8415614680578287013590505b61468a8582614612565b8655506146f1565b601f1984166146a086614490565b5f5b828110156146c7578489013582556001820191506020850194506020810190506146a2565b868310156146e457848901356146e0601f8916826145f6565b8355505b6001600288020188555050505b50505050505050565b61470583838361462d565b505050565b5f81015f83018061471a81614348565b905061472681846143a4565b505050600181016020830161473b81856143c7565b6147468183866146fa565b505050505050565b614758828261470a565b5050565b5f819050919050565b5f8135905061477381614339565b92915050565b5f6147876020840184614765565b905092915050565b5f80fd5b5f80fd5b5f80fd5b5f80833560016020038436030381126147b7576147b6614797565b5b83810192508235915060208301925067ffffffffffffffff8211156147df576147de61478f565b5b6001820236038313156147f5576147f4614793565b5b509250929050565b5f6148088385613de0565b93506148158385846138de565b61481e836133f6565b840190509392505050565b5f6040830161483a5f840184614779565b6148465f860182613dc7565b50614854602084018461479b565b85830360208701526148678382846147fd565b925050508091505092915050565b5f6148808383614829565b905092915050565b5f823560016040038336030381126148a3576148a2614797565b5b82810191505092915050565b5f602082019050919050565b5f6148c68385613d71565b9350836020840285016148d88461475c565b805f5b8781101561491b5784840389526148f28284614888565b6148fc8582614875565b9450614907836148af565b925060208a019950506001810190506148db565b50829750879450505050509392505050565b5f6060820190506149405f830187613b0d565b81810360208301526149528186613cf4565b905081810360408301526149678184866148bb565b905095945050505050565b5f6040820190506149855f830185613b0d565b6149926020830184613b0d565b9392505050565b5f6149a48385613f42565b93506149b18385846138de565b6149ba836133f6565b840190509392505050565b5f6060820190506149d85f830187613b0d565b81810360208301526149ea8186613cf4565b905081810360408301526149ff818486614999565b905095945050505050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f614a3e6015836133be565b9150614a4982614a0a565b602082019050919050565b5f6020820190508181035f830152614a6b81614a32565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f60208284031215614ab457614ab3613467565b5b5f614ac184828501614765565b91505092915050565b5f81905092915050565b5f614adf8385614aca565b9350614aec8385846138de565b82840190509392505050565b5f614b04828486614ad4565b91508190509392505050565b614b1981613db6565b82525050565b5f606082019050614b325f8301866139bd565b614b3f6020830185614b10565b614b4c60408301846139bd565b949350505050565b5f81519050919050565b5f81905092915050565b5f819050602082019050919050565b614b80816139b4565b82525050565b5f614b918383614b77565b60208301905092915050565b5f602082019050919050565b5f614bb382614b54565b614bbd8185614b5e565b9350614bc883614b68565b805f5b83811015614bf8578151614bdf8882614b86565b9750614bea83614b9d565b925050600181019050614bcb565b5085935050505092915050565b5f614c108284614ba9565b915081905092915050565b5f608082019050614c2e5f8301876139bd565b614c3b6020830186613b0d565b614c486040830185613b0d565b614c5560608301846139bd565b95945050505050565b5f80fd5b5f80fd5b5f67ffffffffffffffff821115614c8057614c7f613836565b5b614c89826133f6565b9050602081019050919050565b5f614ca8614ca384614c66565b613894565b905082815260208101848484011115614cc457614cc3613832565b5b614ccf8482856133ce565b509392505050565b5f82601f830112614ceb57614cea6136c1565b5b8151614cfb848260208601614c96565b91505092915050565b5f60808284031215614d1957614d18614c5e565b5b614d236080613894565b90505f614d3284828501614151565b5f830152506020614d4584828501614151565b602083015250604082015167ffffffffffffffff811115614d6957614d68614c62565b5b614d7584828501614cd7565b604083015250606082015167ffffffffffffffff811115614d9957614d98614c62565b5b614da584828501614cd7565b60608301525092915050565b5f60208284031215614dc657614dc5613467565b5b5f82015167ffffffffffffffff811115614de357614de261346b565b5b614def84828501614d04565b91505092915050565b5f819050815f5260205f209050919050565b601f821115614e4b57614e1c81614df8565b614e25846144a2565b81016020851015614e34578190505b614e48614e40856144a2565b830182614582565b50505b505050565b614e59826133b4565b67ffffffffffffffff811115614e7257614e71613836565b5b614e7c8254614460565b614e87828285614e0a565b5f60209050601f831160018114614eb8575f8415614ea6578287015190505b614eb08582614612565b865550614f17565b601f198416614ec686614df8565b5f5b82811015614eed57848901518255600182019150602085019450602081019050614ec8565b86831015614f0a5784890151614f06601f8916826145f6565b8355505b6001600288020188555050505b505050505050565b5f81519050614f2d81613478565b92915050565b5f60208284031215614f4857614f47613467565b5b5f614f5584828501614f1f565b91505092915050565b614f67816139b4565b8114614f71575f80fd5b50565b5f81519050614f8281614f5e565b92915050565b5f60208284031215614f9d57614f9c613467565b5b5f614faa84828501614f74565b91505092915050565b5f604082019050614fc65f8301856139bd565b614fd36020830184613b0d565b9392505050565b5f614fe482613dd6565b614fee8185614aca565b9350614ffe8185602086016133ce565b80840191505092915050565b5f6150158284614fda565b915081905092915050565b5f60a0820190506150335f8301886139bd565b61504060208301876139bd565b61504d60408301866139bd565b61505a6060830185613b0d565b6150676080830184613b1c565b9695505050505050565b5f60ff82169050919050565b61508681615071565b82525050565b5f60808201905061509f5f8301876139bd565b6150ac602083018661507d565b6150b960408301856139bd565b6150c660608301846139bd565b9594505050505056fe43727367656e566572696669636174696f6e2875696e743235362063727349642c75696e74323536206d61784269744c656e6774682c62797465732063727344696765737429507265704b657967656e566572696669636174696f6e2875696e7432353620707265704b657967656e4964294b657967656e566572696669636174696f6e2875696e7432353620707265704b657967656e49642c75696e74323536206b657949642c4b65794469676573745b5d206b657944696765737473294b65794469676573742875696e7438206b6579547970652c627974657320646967657374294b65794469676573742875696e7438206b6579547970652c62797465732064696765737429 + ///0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801562000043575f80fd5b50620000546200005a60201b60201c565b620001c4565b5f6200006b6200015e60201b60201c565b9050805f0160089054906101000a900460ff1615620000b6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146200015b5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051620001529190620001a9565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b620001a38162000185565b82525050565b5f602082019050620001be5f83018462000198565b92915050565b608051615514620001eb5f395f81816126be0152818161271301526129b501526155145ff3fe608060405260043610610108575f3560e01c8063589adb0e11610094578063ad3cb1cc11610063578063ad3cb1cc14610353578063baff211e1461037d578063c55b8724146103a7578063caa367db146103e4578063d52f10eb1461040c57610108565b8063589adb0e1461029657806362978787146102be57806384b0196e146102e6578063936608ae1461031657610108565b80633c02f834116100db5780633c02f834146101c457806345af261b146101ec5780634610ffe8146102285780634f1ef2861461025057806352d1902d1461026c57610108565b80630d8e6e2c1461010c57806316c713d91461013657806319f4f6321461017257806339f73810146101ae575b5f80fd5b348015610117575f80fd5b50610120610436565b60405161012d9190613779565b60405180910390f35b348015610141575f80fd5b5061015c600480360381019061015791906137dd565b6104b1565b60405161016991906138ef565b60405180910390f35b34801561017d575f80fd5b50610198600480360381019061019391906137dd565b610582565b6040516101a59190613982565b60405180910390f35b3480156101b9575f80fd5b506101c261062f565b005b3480156101cf575f80fd5b506101ea60048036038101906101e591906139be565b61087e565b005b3480156101f7575f80fd5b50610212600480360381019061020d91906137dd565b610a2d565b60405161021f9190613982565b60405180910390f35b348015610233575f80fd5b5061024e60048036038101906102499190613ab2565b610ac2565b005b61026a60048036038101906102659190613c95565b611007565b005b348015610277575f80fd5b50610280611026565b60405161028d9190613d07565b60405180910390f35b3480156102a1575f80fd5b506102bc60048036038101906102b79190613d20565b611057565b005b3480156102c9575f80fd5b506102e460048036038101906102df9190613d7d565b6113a9565b005b3480156102f1575f80fd5b506102fa61188a565b60405161030d9796959493929190613f1d565b60405180910390f35b348015610321575f80fd5b5061033c600480360381019061033791906137dd565b611993565b60405161034a92919061422f565b60405180910390f35b34801561035e575f80fd5b50610367611d3a565b6040516103749190613779565b60405180910390f35b348015610388575f80fd5b50610391611d73565b60405161039e9190614264565b60405180910390f35b3480156103b2575f80fd5b506103cd60048036038101906103c891906137dd565b611d8a565b6040516103db9291906142c5565b60405180910390f35b3480156103ef575f80fd5b5061040a600480360381019061040591906142fa565b61209c565b005b348015610417575f80fd5b50610420612286565b60405161042d9190614264565b60405180910390f35b60606040518060400160405280600d81526020017f4b4d5347656e65726174696f6e000000000000000000000000000000000000008152506104775f61229d565b610481600161229d565b61048a5f61229d565b60405160200161049d94939291906143f3565b604051602081830303815290604052905090565b60605f6104bc612367565b90505f816003015f8581526020019081526020015f20549050816002015f8581526020019081526020015f205f8281526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561057457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161052b575b505050505092505050919050565b5f8061058c612367565b9050806001015f8481526020019081526020015f205f9054906101000a900460ff166105ef57826040517f84de13310000000000000000000000000000000000000000000000000000000081526004016105e69190614264565b60405180910390fd5b5f816006015f8581526020019081526020015f2054905081600d015f8281526020019081526020015f205f9054906101000a900460ff1692505050919050565b600161063961238e565b67ffffffffffffffff161461067a576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f6106856123b2565b9050805f0160089054906101000a900460ff16806106cd57508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b15610704576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff0219169083151502179055506107bd6040518060400160405280600d81526020017f4b4d5347656e65726174696f6e000000000000000000000000000000000000008152506040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506123d9565b5f6107c6612367565b905060f8600360058111156107de576107dd61390f565b5b901b816004018190555060f8600460058111156107fe576107fd61390f565b5b901b816005018190555060f860058081111561081d5761081c61390f565b5b901b8160090181905550505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2826040516108729190614473565b60405180910390a15050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ff91906144a0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461096e57336040517f0e56cf3d00000000000000000000000000000000000000000000000000000000815260040161096591906144cb565b60405180910390fd5b5f610977612367565b9050806009015f81548092919061098d90614511565b91905055505f816009015490508382600a015f8381526020019081526020015f20819055508282600d015f8381526020019081526020015f205f6101000a81548160ff021916908360018111156109e7576109e661390f565b5b02179055507f3f038f6f88cb3031b7718588403a2ec220576a868be07dde4c02b846ca352ef5818585604051610a1f93929190614558565b60405180910390a150505050565b5f80610a37612367565b9050806001015f8481526020019081526020015f205f9054906101000a900460ff16610a9a57826040517fda32d00f000000000000000000000000000000000000000000000000000000008152600401610a919190614264565b60405180910390fd5b80600d015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b8152600401610b0f91906144cb565b602060405180830381865afa158015610b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4e91906145c2565b610b8f57336040517faee86323000000000000000000000000000000000000000000000000000000008152600401610b8691906144cb565b60405180910390fd5b5f610b98612367565b90505f816006015f8881526020019081526020015f205490505f610bbe828989896123ef565b90505f610bcc8287876125c6565b9050835f015f8a81526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610c6c5788816040517f98fb957d000000000000000000000000000000000000000000000000000000008152600401610c639291906145ed565b60405180910390fd5b6001845f015f8b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f846002015f8b81526020019081526020015f205f8481526020019081526020015f2090508033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f81805490509050856001015f8c81526020019081526020015f205f9054906101000a900460ff16158015610d8f5750610d8e8161262b565b5b15610ffa576001866001015f8d81526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b8a8a9050811015610e4557866007015f8d81526020019081526020015f208b8b83818110610df257610df1614614565b5b9050602002810190610e04919061464d565b908060018154018082558091505060019003905f5260205f2090600202015f909190919091508181610e369190614a89565b50508080600101915050610dc1565b5083866003015f8d81526020019081526020015f20819055508a86600801819055505f8167ffffffffffffffff811115610e8257610e81613b71565b5b604051908082528060200260200182016040528015610eb557816020015b6060815260200190600190039081610ea05790505b5090505f5b82811015610fba5773a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e3b2a874858381548110610f0557610f04614614565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610f4991906144cb565b5f60405180830381865afa158015610f63573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610f8b9190614bea565b60600151828281518110610fa257610fa1614614565b5b60200260200101819052508080600101915050610eba565b507feb85c26dbcad46b80a68a0f24cce7c2c90f0a1faded84184138839fc9e80a25b8c828d8d604051610ff09493929190614e02565b60405180910390a1505b5050505050505050505050565b61100f6126bc565b611018826127a2565b6110228282612895565b5050565b5f61102f6129b3565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b81526004016110a491906144cb565b602060405180830381865afa1580156110bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e391906145c2565b61112457336040517faee8632300000000000000000000000000000000000000000000000000000000815260040161111b91906144cb565b60405180910390fd5b5f61112d612367565b90505f61113985612a3a565b90505f6111478286866125c6565b9050825f015f8781526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156111e75785816040517f33ca1fe30000000000000000000000000000000000000000000000000000000081526004016111de9291906145ed565b60405180910390fd5b6001835f015f8881526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f836002015f8881526020019081526020015f205f8481526020019081526020015f2090508033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836001015f8881526020019081526020015f205f9054906101000a900460ff161580156113065750611305818054905061262b565b5b156113a0576001846001015f8981526020019081526020015f205f6101000a81548160ff02191690831515021790555082846003015f8981526020019081526020015f20819055505f846006015f8981526020019081526020015f205490507f78b179176d1f19d7c28e80823deba2624da2ca2ec64b1701f3632a87c9aedc928882604051611396929190614e47565b60405180910390a1505b50505050505050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b81526004016113f691906144cb565b602060405180830381865afa158015611411573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143591906145c2565b61147657336040517faee8632300000000000000000000000000000000000000000000000000000000815260040161146d91906144cb565b60405180910390fd5b5f61147f612367565b90505f81600a015f8881526020019081526020015f205490505f6114a588838989612a92565b90505f6114b38287876125c6565b9050835f015f8a81526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156115535788816040517ffcf5a6e900000000000000000000000000000000000000000000000000000000815260040161154a9291906145ed565b60405180910390fd5b6001845f015f8b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f846002015f8b81526020019081526020015f205f8481526020019081526020015f2090508033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f81805490509050856001015f8c81526020019081526020015f205f9054906101000a900460ff1615801561167657506116758161262b565b5b1561187d576001866001015f8d81526020019081526020015f205f6101000a81548160ff021916908315150217905550898987600b015f8e81526020019081526020015f2091826116c8929190614968565b5083866003015f8d81526020019081526020015f20819055508a86600c01819055505f8167ffffffffffffffff81111561170557611704613b71565b5b60405190808252806020026020018201604052801561173857816020015b60608152602001906001900390816117235790505b5090505f5b8281101561183d5773a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e3b2a87485838154811061178857611787614614565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016117cc91906144cb565b5f60405180830381865afa1580156117e6573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061180e9190614bea565b6060015182828151811061182557611824614614565b5b6020026020010181905250808060010191505061173d565b507f2258b73faed33fb2e2ea454403bef974920caf682ab3a723484fcf67553b16a28c828d8d6040516118739493929190614e9a565b60405180910390a1505b5050505050505050505050565b5f6060805f805f60605f61189c612b19565b90505f801b815f01541480156118b757505f801b8160010154145b6118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90614f29565b60405180910390fd5b6118fe612b40565b611906612bde565b46305f801b5f67ffffffffffffffff81111561192557611924613b71565b5b6040519080825280602002602001820160405280156119535781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b6060805f61199f612367565b9050806001015f8581526020019081526020015f205f9054906101000a900460ff16611a0257836040517f84de13310000000000000000000000000000000000000000000000000000000081526004016119f99190614264565b60405180910390fd5b5f816003015f8681526020019081526020015f205490505f826002015f8781526020019081526020015f205f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015611ab957602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611a70575b505050505090505f815190505f8167ffffffffffffffff811115611ae057611adf613b71565b5b604051908082528060200260200182016040528015611b1357816020015b6060815260200190600190039081611afe5790505b5090505f5b82811015611bf85773a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e3b2a874858381518110611b6357611b62614614565b5b60200260200101516040518263ffffffff1660e01b8152600401611b8791906144cb565b5f60405180830381865afa158015611ba1573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611bc99190614bea565b60600151828281518110611be057611bdf614614565b5b60200260200101819052508080600101915050611b18565b5080856007015f8a81526020019081526020015f2080805480602002602001604051908101604052809291908181526020015f905b82821015611d26578382905f5260205f2090600202016040518060400160405290815f82015f9054906101000a900460ff166001811115611c7157611c7061390f565b5b6001811115611c8357611c8261390f565b5b8152602001600182018054611c979061479b565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc39061479b565b8015611d0e5780601f10611ce557610100808354040283529160200191611d0e565b820191905f5260205f20905b815481529060010190602001808311611cf157829003601f168201915b50505050508152505081526020019060010190611c2d565b505050509050965096505050505050915091565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b5f80611d7d612367565b905080600c015491505090565b6060805f611d96612367565b9050806001015f8581526020019081526020015f205f9054906101000a900460ff16611df957836040517fda32d00f000000000000000000000000000000000000000000000000000000008152600401611df09190614264565b60405180910390fd5b5f816003015f8681526020019081526020015f205490505f826002015f8781526020019081526020015f205f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015611eb057602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611e67575b505050505090505f815190505f8167ffffffffffffffff811115611ed757611ed6613b71565b5b604051908082528060200260200182016040528015611f0a57816020015b6060815260200190600190039081611ef55790505b5090505f5b82811015611fef5773a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e3b2a874858381518110611f5a57611f59614614565b5b60200260200101516040518263ffffffff1660e01b8152600401611f7e91906144cb565b5f60405180830381865afa158015611f98573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611fc09190614bea565b60600151828281518110611fd757611fd6614614565b5b60200260200101819052508080600101915050611f0f565b508085600b015f8a81526020019081526020015f208080546120109061479b565b80601f016020809104026020016040519081016040528092919081815260200182805461203c9061479b565b80156120875780601f1061205e57610100808354040283529160200191612087565b820191905f5260205f20905b81548152906001019060200180831161206a57829003601f168201915b50505050509050965096505050505050915091565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120f9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061211d91906144a0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461218c57336040517f0e56cf3d00000000000000000000000000000000000000000000000000000000815260040161218391906144cb565b60405180910390fd5b5f612195612367565b9050806004015f8154809291906121ab90614511565b91905055505f81600401549050816005015f8154809291906121cc90614511565b91905055505f8260050154905080836006015f8481526020019081526020015f208190555081836006015f8381526020019081526020015f20819055505f8484600d015f8581526020019081526020015f205f6101000a81548160ff0219169083600181111561223f5761223e61390f565b5b02179055507f02024007d96574dbc9d11328bfee9893e7c7bb4ef4aa806df33bfdf454eb5e6083828760405161227793929190614558565b60405180910390a15050505050565b5f80612290612367565b9050806008015491505090565b60605f60016122ab84612c7c565b0190505f8167ffffffffffffffff8111156122c9576122c8613b71565b5b6040519080825280601f01601f1916602001820160405280156122fb5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561235c578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161235157612350614f47565b5b0494505f8503612308575b819350505050919050565b5f7f0b8fdb1f0a6356dd20a6cbc6f9668fac23b85f96575d10e333e603faa794ac00905090565b5f6123976123b2565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6123e1612dcd565b6123eb8282612e0d565b5050565b5f808383905067ffffffffffffffff81111561240e5761240d613b71565b5b60405190808252806020026020018201604052801561243c5781602001602082028036833780820191505090505b5090505f5b84849050811015612540576040518060600160405280602581526020016154ef602591398051906020012085858381811061247f5761247e614614565b5b9050602002810190612491919061464d565b5f0160208101906124a29190614f74565b8686848181106124b5576124b4614614565b5b90506020028101906124c7919061464d565b80602001906124d69190614702565b6040516124e4929190614fcd565b60405180910390206040516020016124fe93929190614ff4565b6040516020818303038152906040528051906020012082828151811061252757612526614614565b5b6020026020010181815250508080600101915050612441565b506125bb6040518060a001604052806072815260200161547d607291398051906020012087878460405160200161257791906150da565b604051602081830303815290604052805190602001206040516020016125a094939291906150f0565b60405160208183030381529060405280519060200120612e5e565b915050949350505050565b5f806126158585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050612e77565b905061262081612ea1565b809150509392505050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663b4722bc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ae9190615147565b905080831015915050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061276957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612750612f71565b73ffffffffffffffffffffffffffffffffffffffff1614155b156127a0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127ff573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061282391906144a0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461289257336040517f0e56cf3d00000000000000000000000000000000000000000000000000000000815260040161288991906144cb565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156128fd57506040513d601f19601f820116820180604052508101906128fa919061519c565b60015b61293e57816040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161293591906144cb565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b81146129a457806040517faa1d49a400000000000000000000000000000000000000000000000000000000815260040161299b9190613d07565b60405180910390fd5b6129ae8383612fc4565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614612a38576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f612a8b6040518060600160405280602c8152602001615451602c91398051906020012083604051602001612a709291906151c7565b60405160208183030381529060405280519060200120612e5e565b9050919050565b5f612b0f60405180608001604052806046815260200161540b604691398051906020012086868686604051602001612acb929190614fcd565b60405160208183030381529060405280519060200120604051602001612af494939291906150f0565b60405160208183030381529060405280519060200120612e5e565b9050949350505050565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f612b4b612b19565b9050806002018054612b5c9061479b565b80601f0160208091040260200160405190810160405280929190818152602001828054612b889061479b565b8015612bd35780601f10612baa57610100808354040283529160200191612bd3565b820191905f5260205f20905b815481529060010190602001808311612bb657829003601f168201915b505050505091505090565b60605f612be9612b19565b9050806003018054612bfa9061479b565b80601f0160208091040260200160405190810160405280929190818152602001828054612c269061479b565b8015612c715780601f10612c4857610100808354040283529160200191612c71565b820191905f5260205f20905b815481529060010190602001808311612c5457829003601f168201915b505050505091505090565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612cd8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612cce57612ccd614f47565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612d15576d04ee2d6d415b85acef81000000008381612d0b57612d0a614f47565b5b0492506020810190505b662386f26fc100008310612d4457662386f26fc100008381612d3a57612d39614f47565b5b0492506010810190505b6305f5e1008310612d6d576305f5e1008381612d6357612d62614f47565b5b0492506008810190505b6127108310612d92576127108381612d8857612d87614f47565b5b0492506004810190505b60648310612db55760648381612dab57612daa614f47565b5b0492506002810190505b600a8310612dc4576001810190505b80915050919050565b612dd5613036565b612e0b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b612e15612dcd565b5f612e1e612b19565b905082816002019081612e319190615246565b5081816003019081612e439190615246565b505f801b815f01819055505f801b8160010181905550505050565b5f612e70612e6a613054565b83613062565b9050919050565b5f805f80612e8586866130a2565b925092509250612e9582826130f7565b82935050505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663203d0114826040518263ffffffff1660e01b8152600401612eee91906144cb565b602060405180830381865afa158015612f09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f2d91906145c2565b612f6e57806040517f2a7c6ef6000000000000000000000000000000000000000000000000000000008152600401612f6591906144cb565b60405180910390fd5b50565b5f612f9d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b613259565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612fcd82613262565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f8151111561302957613023828261332b565b50613032565b6130316133ab565b5b5050565b5f61303f6123b2565b5f0160089054906101000a900460ff16905090565b5f61305d6133e7565b905090565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f60418451036130e2575f805f602087015192506040870151915060608701515f1a90506130d48882858561344a565b9550955095505050506130f0565b5f600285515f1b9250925092505b9250925092565b5f600381111561310a5761310961390f565b5b82600381111561311d5761311c61390f565b5b031561325557600160038111156131375761313661390f565b5b82600381111561314a5761314961390f565b5b03613181576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156131955761319461390f565b5b8260038111156131a8576131a761390f565b5b036131ec57805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016131e39190614264565b60405180910390fd5b6003808111156131ff576131fe61390f565b5b8260038111156132125761321161390f565b5b0361325457806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161324b9190613d07565b60405180910390fd5b5b5050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b036132bd57806040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016132b491906144cb565b60405180910390fd5b806132e97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b613259565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516133549190615345565b5f60405180830381855af49150503d805f811461338c576040519150601f19603f3d011682016040523d82523d5f602084013e613391565b606091505b50915091506133a1858383613531565b9250505092915050565b5f3411156133e5576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6134116135be565b613419613634565b463060405160200161342f95949392919061535b565b60405160208183030381529060405280519060200120905090565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115613486575f600385925092509250613527565b5f6001888888886040515f81526020016040526040516134a994939291906153c7565b6020604051602081039080840390855afa1580156134c9573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361351a575f60015f801b93509350935050613527565b805f805f1b935093509350505b9450945094915050565b60608261354657613541826136ab565b6135b6565b5f825114801561356c57505f8473ffffffffffffffffffffffffffffffffffffffff163b145b156135ae57836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016135a591906144cb565b60405180910390fd5b8190506135b7565b5b9392505050565b5f806135c8612b19565b90505f6135d3612b40565b90505f815111156135ef57808051906020012092505050613631565b5f825f015490505f801b811461360a57809350505050613631565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f8061363e612b19565b90505f613649612bde565b90505f81511115613665578080519060200120925050506136a8565b5f826001015490505f801b8114613681578093505050506136a8565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f815111156136bd5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561372657808201518184015260208101905061370b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61374b826136ef565b61375581856136f9565b9350613765818560208601613709565b61376e81613731565b840191505092915050565b5f6020820190508181035f8301526137918184613741565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6137bc816137aa565b81146137c6575f80fd5b50565b5f813590506137d7816137b3565b92915050565b5f602082840312156137f2576137f16137a2565b5b5f6137ff848285016137c9565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61385a82613831565b9050919050565b61386a81613850565b82525050565b5f61387b8383613861565b60208301905092915050565b5f602082019050919050565b5f61389d82613808565b6138a78185613812565b93506138b283613822565b805f5b838110156138e25781516138c98882613870565b97506138d483613887565b9250506001810190506138b5565b5085935050505092915050565b5f6020820190508181035f8301526139078184613893565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6002811061394d5761394c61390f565b5b50565b5f81905061395d8261393c565b919050565b5f61396c82613950565b9050919050565b61397c81613962565b82525050565b5f6020820190506139955f830184613973565b92915050565b600281106139a7575f80fd5b50565b5f813590506139b88161399b565b92915050565b5f80604083850312156139d4576139d36137a2565b5b5f6139e1858286016137c9565b92505060206139f2858286016139aa565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112613a1d57613a1c6139fc565b5b8235905067ffffffffffffffff811115613a3a57613a39613a00565b5b602083019150836020820283011115613a5657613a55613a04565b5b9250929050565b5f8083601f840112613a7257613a716139fc565b5b8235905067ffffffffffffffff811115613a8f57613a8e613a00565b5b602083019150836001820283011115613aab57613aaa613a04565b5b9250929050565b5f805f805f60608688031215613acb57613aca6137a2565b5b5f613ad8888289016137c9565b955050602086013567ffffffffffffffff811115613af957613af86137a6565b5b613b0588828901613a08565b9450945050604086013567ffffffffffffffff811115613b2857613b276137a6565b5b613b3488828901613a5d565b92509250509295509295909350565b613b4c81613850565b8114613b56575f80fd5b50565b5f81359050613b6781613b43565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613ba782613731565b810181811067ffffffffffffffff82111715613bc657613bc5613b71565b5b80604052505050565b5f613bd8613799565b9050613be48282613b9e565b919050565b5f67ffffffffffffffff821115613c0357613c02613b71565b5b613c0c82613731565b9050602081019050919050565b828183375f83830152505050565b5f613c39613c3484613be9565b613bcf565b905082815260208101848484011115613c5557613c54613b6d565b5b613c60848285613c19565b509392505050565b5f82601f830112613c7c57613c7b6139fc565b5b8135613c8c848260208601613c27565b91505092915050565b5f8060408385031215613cab57613caa6137a2565b5b5f613cb885828601613b59565b925050602083013567ffffffffffffffff811115613cd957613cd86137a6565b5b613ce585828601613c68565b9150509250929050565b5f819050919050565b613d0181613cef565b82525050565b5f602082019050613d1a5f830184613cf8565b92915050565b5f805f60408486031215613d3757613d366137a2565b5b5f613d44868287016137c9565b935050602084013567ffffffffffffffff811115613d6557613d646137a6565b5b613d7186828701613a5d565b92509250509250925092565b5f805f805f60608688031215613d9657613d956137a2565b5b5f613da3888289016137c9565b955050602086013567ffffffffffffffff811115613dc457613dc36137a6565b5b613dd088828901613a5d565b9450945050604086013567ffffffffffffffff811115613df357613df26137a6565b5b613dff88828901613a5d565b92509250509295509295909350565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b613e4281613e0e565b82525050565b613e51816137aa565b82525050565b613e6081613850565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613e98816137aa565b82525050565b5f613ea98383613e8f565b60208301905092915050565b5f602082019050919050565b5f613ecb82613e66565b613ed58185613e70565b9350613ee083613e80565b805f5b83811015613f10578151613ef78882613e9e565b9750613f0283613eb5565b925050600181019050613ee3565b5085935050505092915050565b5f60e082019050613f305f83018a613e39565b8181036020830152613f428189613741565b90508181036040830152613f568188613741565b9050613f656060830187613e48565b613f726080830186613e57565b613f7f60a0830185613cf8565b81810360c0830152613f918184613ec1565b905098975050505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f613fe2826136ef565b613fec8185613fc8565b9350613ffc818560208601613709565b61400581613731565b840191505092915050565b5f61401b8383613fd8565b905092915050565b5f602082019050919050565b5f61403982613f9f565b6140438185613fa9565b93508360208202850161405585613fb9565b805f5b8581101561409057848403895281516140718582614010565b945061407c83614023565b925060208a01995050600181019050614058565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b600281106140dc576140db61390f565b5b50565b5f8190506140ec826140cb565b919050565b5f6140fb826140df565b9050919050565b61410b816140f1565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f61413582614111565b61413f818561411b565b935061414f818560208601613709565b61415881613731565b840191505092915050565b5f604083015f8301516141785f860182614102565b5060208301518482036020860152614190828261412b565b9150508091505092915050565b5f6141a88383614163565b905092915050565b5f602082019050919050565b5f6141c6826140a2565b6141d081856140ac565b9350836020820285016141e2856140bc565b805f5b8581101561421d57848403895281516141fe858261419d565b9450614209836141b0565b925060208a019950506001810190506141e5565b50829750879550505050505092915050565b5f6040820190508181035f830152614247818561402f565b9050818103602083015261425b81846141bc565b90509392505050565b5f6020820190506142775f830184613e48565b92915050565b5f82825260208201905092915050565b5f61429782614111565b6142a1818561427d565b93506142b1818560208601613709565b6142ba81613731565b840191505092915050565b5f6040820190508181035f8301526142dd818561402f565b905081810360208301526142f1818461428d565b90509392505050565b5f6020828403121561430f5761430e6137a2565b5b5f61431c848285016139aa565b91505092915050565b5f81905092915050565b5f614339826136ef565b6143438185614325565b9350614353818560208601613709565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f614393600283614325565b915061439e8261435f565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6143dd600183614325565b91506143e8826143a9565b600182019050919050565b5f6143fe828761432f565b915061440982614387565b9150614415828661432f565b9150614420826143d1565b915061442c828561432f565b9150614437826143d1565b9150614443828461432f565b915081905095945050505050565b5f67ffffffffffffffff82169050919050565b61446d81614451565b82525050565b5f6020820190506144865f830184614464565b92915050565b5f8151905061449a81613b43565b92915050565b5f602082840312156144b5576144b46137a2565b5b5f6144c28482850161448c565b91505092915050565b5f6020820190506144de5f830184613e57565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61451b826137aa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361454d5761454c6144e4565b5b600182019050919050565b5f60608201905061456b5f830186613e48565b6145786020830185613e48565b6145856040830184613973565b949350505050565b5f8115159050919050565b6145a18161458d565b81146145ab575f80fd5b50565b5f815190506145bc81614598565b92915050565b5f602082840312156145d7576145d66137a2565b5b5f6145e4848285016145ae565b91505092915050565b5f6040820190506146005f830185613e48565b61460d6020830184613e57565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f80fd5b5f80fd5b5f80fd5b5f8235600160400383360303811261466857614667614641565b5b80830191505092915050565b60028110614680575f80fd5b50565b5f813561468f81614674565b80915050919050565b5f815f1b9050919050565b5f60ff6146af84614698565b9350801983169250808416831791505092915050565b5f6146cf826140df565b9050919050565b5f819050919050565b6146e8826146c5565b6146fb6146f4826146d6565b83546146a3565b8255505050565b5f808335600160200384360303811261471e5761471d614641565b5b80840192508235915067ffffffffffffffff8211156147405761473f614645565b5b60208301925060018202360383131561475c5761475b614649565b5b509250929050565b5f82905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806147b257607f821691505b6020821081036147c5576147c461476e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026148277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826147ec565b61483186836147ec565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61486c614867614862846137aa565b614849565b6137aa565b9050919050565b5f819050919050565b61488583614852565b61489961489182614873565b8484546147f8565b825550505050565b5f90565b6148ad6148a1565b6148b881848461487c565b505050565b5b818110156148db576148d05f826148a5565b6001810190506148be565b5050565b601f821115614920576148f1816147cb565b6148fa846147dd565b81016020851015614909578190505b61491d614915856147dd565b8301826148bd565b50505b505050565b5f82821c905092915050565b5f6149405f1984600802614925565b1980831691505092915050565b5f6149588383614931565b9150826002028217905092915050565b6149728383614764565b67ffffffffffffffff81111561498b5761498a613b71565b5b614995825461479b565b6149a08282856148df565b5f601f8311600181146149cd575f84156149bb578287013590505b6149c5858261494d565b865550614a2c565b601f1984166149db866147cb565b5f5b82811015614a02578489013582556001820191506020850194506020810190506149dd565b86831015614a1f5784890135614a1b601f891682614931565b8355505b6001600288020188555050505b50505050505050565b614a40838383614968565b505050565b5f81015f830180614a5581614683565b9050614a6181846146df565b5050506001810160208301614a768185614702565b614a81818386614a35565b505050505050565b614a938282614a45565b5050565b5f80fd5b5f80fd5b5f67ffffffffffffffff821115614ab957614ab8613b71565b5b614ac282613731565b9050602081019050919050565b5f614ae1614adc84614a9f565b613bcf565b905082815260208101848484011115614afd57614afc613b6d565b5b614b08848285613709565b509392505050565b5f82601f830112614b2457614b236139fc565b5b8151614b34848260208601614acf565b91505092915050565b5f60808284031215614b5257614b51614a97565b5b614b5c6080613bcf565b90505f614b6b8482850161448c565b5f830152506020614b7e8482850161448c565b602083015250604082015167ffffffffffffffff811115614ba257614ba1614a9b565b5b614bae84828501614b10565b604083015250606082015167ffffffffffffffff811115614bd257614bd1614a9b565b5b614bde84828501614b10565b60608301525092915050565b5f60208284031215614bff57614bfe6137a2565b5b5f82015167ffffffffffffffff811115614c1c57614c1b6137a6565b5b614c2884828501614b3d565b91505092915050565b5f819050919050565b5f81359050614c4881614674565b92915050565b5f614c5c6020840184614c3a565b905092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083356001602003843603038112614c8c57614c8b614c6c565b5b83810192508235915060208301925067ffffffffffffffff821115614cb457614cb3614c64565b5b600182023603831315614cca57614cc9614c68565b5b509250929050565b5f614cdd838561411b565b9350614cea838584613c19565b614cf383613731565b840190509392505050565b5f60408301614d0f5f840184614c4e565b614d1b5f860182614102565b50614d296020840184614c70565b8583036020870152614d3c838284614cd2565b925050508091505092915050565b5f614d558383614cfe565b905092915050565b5f82356001604003833603038112614d7857614d77614c6c565b5b82810191505092915050565b5f602082019050919050565b5f614d9b83856140ac565b935083602084028501614dad84614c31565b805f5b87811015614df0578484038952614dc78284614d5d565b614dd18582614d4a565b9450614ddc83614d84565b925060208a01995050600181019050614db0565b50829750879450505050509392505050565b5f606082019050614e155f830187613e48565b8181036020830152614e27818661402f565b90508181036040830152614e3c818486614d90565b905095945050505050565b5f604082019050614e5a5f830185613e48565b614e676020830184613e48565b9392505050565b5f614e79838561427d565b9350614e86838584613c19565b614e8f83613731565b840190509392505050565b5f606082019050614ead5f830187613e48565b8181036020830152614ebf818661402f565b90508181036040830152614ed4818486614e6e565b905095945050505050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f614f136015836136f9565b9150614f1e82614edf565b602082019050919050565b5f6020820190508181035f830152614f4081614f07565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f60208284031215614f8957614f886137a2565b5b5f614f9684828501614c3a565b91505092915050565b5f81905092915050565b5f614fb48385614f9f565b9350614fc1838584613c19565b82840190509392505050565b5f614fd9828486614fa9565b91508190509392505050565b614fee816140f1565b82525050565b5f6060820190506150075f830186613cf8565b6150146020830185614fe5565b6150216040830184613cf8565b949350505050565b5f81519050919050565b5f81905092915050565b5f819050602082019050919050565b61505581613cef565b82525050565b5f615066838361504c565b60208301905092915050565b5f602082019050919050565b5f61508882615029565b6150928185615033565b935061509d8361503d565b805f5b838110156150cd5781516150b4888261505b565b97506150bf83615072565b9250506001810190506150a0565b5085935050505092915050565b5f6150e5828461507e565b915081905092915050565b5f6080820190506151035f830187613cf8565b6151106020830186613e48565b61511d6040830185613e48565b61512a6060830184613cf8565b95945050505050565b5f81519050615141816137b3565b92915050565b5f6020828403121561515c5761515b6137a2565b5b5f61516984828501615133565b91505092915050565b61517b81613cef565b8114615185575f80fd5b50565b5f8151905061519681615172565b92915050565b5f602082840312156151b1576151b06137a2565b5b5f6151be84828501615188565b91505092915050565b5f6040820190506151da5f830185613cf8565b6151e76020830184613e48565b9392505050565b5f819050815f5260205f209050919050565b601f82111561524157615212816151ee565b61521b846147dd565b8101602085101561522a578190505b61523e615236856147dd565b8301826148bd565b50505b505050565b61524f826136ef565b67ffffffffffffffff81111561526857615267613b71565b5b615272825461479b565b61527d828285615200565b5f60209050601f8311600181146152ae575f841561529c578287015190505b6152a6858261494d565b86555061530d565b601f1984166152bc866151ee565b5f5b828110156152e3578489015182556001820191506020850194506020810190506152be565b8683101561530057848901516152fc601f891682614931565b8355505b6001600288020188555050505b505050505050565b5f61531f82614111565b6153298185614f9f565b9350615339818560208601613709565b80840191505092915050565b5f6153508284615315565b915081905092915050565b5f60a08201905061536e5f830188613cf8565b61537b6020830187613cf8565b6153886040830186613cf8565b6153956060830185613e48565b6153a26080830184613e57565b9695505050505050565b5f60ff82169050919050565b6153c1816153ac565b82525050565b5f6080820190506153da5f830187613cf8565b6153e760208301866153b8565b6153f46040830185613cf8565b6154016060830184613cf8565b9594505050505056fe43727367656e566572696669636174696f6e2875696e743235362063727349642c75696e74323536206d61784269744c656e6774682c62797465732063727344696765737429507265704b657967656e566572696669636174696f6e2875696e7432353620707265704b657967656e4964294b657967656e566572696669636174696f6e2875696e7432353620707265704b657967656e49642c75696e74323536206b657949642c4b65794469676573745b5d206b657944696765737473294b65794469676573742875696e7438206b6579547970652c627974657320646967657374294b65794469676573742875696e7438206b6579547970652c62797465732064696765737429 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\xA0`@R0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RP4\x80\x15b\0\0CW_\x80\xFD[Pb\0\0Tb\0\0Z` \x1B` \x1CV[b\0\x01\xC4V[_b\0\0kb\0\x01^` \x1B` \x1CV[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15b\0\0\xB6W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14b\0\x01[Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Qb\0\x01R\x91\x90b\0\x01\xA9V[`@Q\x80\x91\x03\x90\xA1[PV[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[b\0\x01\xA3\x81b\0\x01\x85V[\x82RPPV[_` \x82\x01\x90Pb\0\x01\xBE_\x83\x01\x84b\0\x01\x98V[\x92\x91PPV[`\x80QaQ\xD9b\0\x01\xEB_9_\x81\x81a#\x83\x01R\x81\x81a#\xD8\x01Ra&z\x01RaQ\xD9_\xF3\xFE`\x80`@R`\x046\x10a\x01\x08W_5`\xE0\x1C\x80cX\x9A\xDB\x0E\x11a\0\x94W\x80c\xAD<\xB1\xCC\x11a\0cW\x80c\xAD<\xB1\xCC\x14a\x03SW\x80c\xBA\xFF!\x1E\x14a\x03}W\x80c\xC5[\x87$\x14a\x03\xA7W\x80c\xCA\xA3g\xDB\x14a\x03\xE4W\x80c\xD5/\x10\xEB\x14a\x04\x0CWa\x01\x08V[\x80cX\x9A\xDB\x0E\x14a\x02\x96W\x80cb\x97\x87\x87\x14a\x02\xBEW\x80c\x84\xB0\x19n\x14a\x02\xE6W\x80c\x93f\x08\xAE\x14a\x03\x16Wa\x01\x08V[\x80c<\x02\xF84\x11a\0\xDBW\x80c<\x02\xF84\x14a\x01\xC4W\x80cE\xAF&\x1B\x14a\x01\xECW\x80cF\x10\xFF\xE8\x14a\x02(W\x80cO\x1E\xF2\x86\x14a\x02PW\x80cR\xD1\x90-\x14a\x02lWa\x01\x08V[\x80c\r\x8En,\x14a\x01\x0CW\x80c\x16\xC7\x13\xD9\x14a\x016W\x80c\x19\xF4\xF62\x14a\x01rW\x80c9\xF78\x10\x14a\x01\xAEW[_\x80\xFD[4\x80\x15a\x01\x17W_\x80\xFD[Pa\x01 a\x046V[`@Qa\x01-\x91\x90a4>V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01AW_\x80\xFD[Pa\x01\\`\x04\x806\x03\x81\x01\x90a\x01W\x91\x90a4\xA2V[a\x04\xB1V[`@Qa\x01i\x91\x90a5\xB4V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01}W_\x80\xFD[Pa\x01\x98`\x04\x806\x03\x81\x01\x90a\x01\x93\x91\x90a4\xA2V[a\x05\x82V[`@Qa\x01\xA5\x91\x90a6GV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xB9W_\x80\xFD[Pa\x01\xC2a\x06/V[\0[4\x80\x15a\x01\xCFW_\x80\xFD[Pa\x01\xEA`\x04\x806\x03\x81\x01\x90a\x01\xE5\x91\x90a6\x83V[a\x08~V[\0[4\x80\x15a\x01\xF7W_\x80\xFD[Pa\x02\x12`\x04\x806\x03\x81\x01\x90a\x02\r\x91\x90a4\xA2V[a\n-V[`@Qa\x02\x1F\x91\x90a6GV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x023W_\x80\xFD[Pa\x02N`\x04\x806\x03\x81\x01\x90a\x02I\x91\x90a7wV[a\n\xC2V[\0[a\x02j`\x04\x806\x03\x81\x01\x90a\x02e\x91\x90a9ZV[a\x0E3V[\0[4\x80\x15a\x02wW_\x80\xFD[Pa\x02\x80a\x0ERV[`@Qa\x02\x8D\x91\x90a9\xCCV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\xA1W_\x80\xFD[Pa\x02\xBC`\x04\x806\x03\x81\x01\x90a\x02\xB7\x91\x90a9\xE5V[a\x0E\x83V[\0[4\x80\x15a\x02\xC9W_\x80\xFD[Pa\x02\xE4`\x04\x806\x03\x81\x01\x90a\x02\xDF\x91\x90a:BV[a\x11\xD5V[\0[4\x80\x15a\x02\xF1W_\x80\xFD[Pa\x02\xFAa\x14\xE2V[`@Qa\x03\r\x97\x96\x95\x94\x93\x92\x91\x90a;\xE2V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03!W_\x80\xFD[Pa\x03<`\x04\x806\x03\x81\x01\x90a\x037\x91\x90a4\xA2V[a\x15\xEBV[`@Qa\x03J\x92\x91\x90a>\xF4V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03^W_\x80\xFD[Pa\x03ga\x18\x9EV[`@Qa\x03t\x91\x90a4>V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\x88W_\x80\xFD[Pa\x03\x91a\x18\xD7V[`@Qa\x03\x9E\x91\x90a?)V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\xB2W_\x80\xFD[Pa\x03\xCD`\x04\x806\x03\x81\x01\x90a\x03\xC8\x91\x90a4\xA2V[a\x18\xEEV[`@Qa\x03\xDB\x92\x91\x90a?\x8AV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\xEFW_\x80\xFD[Pa\x04\n`\x04\x806\x03\x81\x01\x90a\x04\x05\x91\x90a?\xBFV[a\x1B\x0CV[\0[4\x80\x15a\x04\x17W_\x80\xFD[Pa\x04 a\x1C\xF6V[`@Qa\x04-\x91\x90a?)V[`@Q\x80\x91\x03\x90\xF3[```@Q\x80`@\x01`@R\x80`\r\x81R` \x01\x7FKMSGeneration\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RPa\x04w_a\x1D\rV[a\x04\x81`\x01a\x1D\rV[a\x04\x8A_a\x1D\rV[`@Q` \x01a\x04\x9D\x94\x93\x92\x91\x90a@\xB8V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x90V[``_a\x04\xBCa\x1D\xD7V[\x90P_\x81`\x04\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x02\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x82\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x05tW` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x05+W[PPPPP\x92PPP\x91\x90PV[_\x80a\x05\x8Ca\x1D\xD7V[\x90P\x80`\x01\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\x05\xEFW\x82`@Q\x7F\x84\xDE\x131\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\x81R`\x04\x01a\x05\xE6\x91\x90a?)V[`@Q\x80\x91\x03\x90\xFD[_\x81`\x07\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x0E\x01_\x82\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x92PPP\x91\x90PV[`\x01a\x069a\x1D\xFEV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x06zW`@Q\x7FoOs\x1F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02_a\x06\x85a\x1E\"V[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x80a\x06\xCDWP\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x15[\x15a\x07\x04W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`\x01\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPa\x07\xBD`@Q\x80`@\x01`@R\x80`\r\x81R` \x01\x7FKMSGeneration\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RP`@Q\x80`@\x01`@R\x80`\x01\x81R` \x01\x7F1\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\x81RPa\x1EIV[_a\x07\xC6a\x1D\xD7V[\x90P`\xF8`\x03`\x05\x81\x11\x15a\x07\xDEWa\x07\xDDa5\xD4V[[\x90\x1B\x81`\x05\x01\x81\x90UP`\xF8`\x04`\x05\x81\x11\x15a\x07\xFEWa\x07\xFDa5\xD4V[[\x90\x1B\x81`\x06\x01\x81\x90UP`\xF8`\x05\x80\x81\x11\x15a\x08\x1DWa\x08\x1Ca5\xD4V[[\x90\x1B\x81`\n\x01\x81\x90UPP_\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x82`@Qa\x08r\x91\x90aA8V[`@Q\x80\x91\x03\x90\xA1PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x08\xDBW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08\xFF\x91\x90aAeV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\tnW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\te\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[_a\twa\x1D\xD7V[\x90P\x80`\n\x01_\x81T\x80\x92\x91\x90a\t\x8D\x90aA\xD6V[\x91\x90PUP_\x81`\n\x01T\x90P\x83\x82`\x0B\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x82\x82`\x0E\x01_\x83\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83`\x01\x81\x11\x15a\t\xE7Wa\t\xE6a5\xD4V[[\x02\x17\x90UP\x7F?\x03\x8Fo\x88\xCB01\xB7q\x85\x88@:.\xC2 Wj\x86\x8B\xE0}\xDEL\x02\xB8F\xCA5.\xF5\x81\x85\x85`@Qa\n\x1F\x93\x92\x91\x90aB\x1DV[`@Q\x80\x91\x03\x90\xA1PPPPV[_\x80a\n7a\x1D\xD7V[\x90P\x80`\x01\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\n\x9AW\x82`@Q\x7F\xDA2\xD0\x0F\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\x81R`\x04\x01a\n\x91\x91\x90a?)V[`@Q\x80\x91\x03\x90\xFD[\x80`\x0E\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0B\x0F\x91\x90aA\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0B*W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0BN\x91\x90aB\x87V[a\x0B\x8FW3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x0B\x86\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[_a\x0B\x98a\x1D\xD7V[\x90P_\x81`\x07\x01_\x88\x81R` \x01\x90\x81R` \x01_ T\x90P_a\x0B\xBE\x82\x89\x89\x89a\x1E_V[\x90P_a\x0B\xCC\x82\x87\x87a 6V[\x90P\x83_\x01_\x8A\x81R` \x01\x90\x81R` \x01_ _\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x0ClW\x88\x81`@Q\x7F\x98\xFB\x95}\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\x81R`\x04\x01a\x0Cc\x92\x91\x90aB\xB2V[`@Q\x80\x91\x03\x90\xFD[`\x01\x84_\x01_\x8B\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_a\x0C\xDC\x8A\x84a \x9BV[\x90P\x84`\x01\x01_\x8B\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\r\x11WPa\r\x10\x81Qa\"\xF0V[[\x15a\x0E'W`\x01\x85`\x01\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_[\x89\x89\x90P\x81\x10\x15a\r\xC7W\x85`\x08\x01_\x8C\x81R` \x01\x90\x81R` \x01_ \x8A\x8A\x83\x81\x81\x10a\rtWa\rsaB\xD9V[[\x90P` \x02\x81\x01\x90a\r\x86\x91\x90aC\x12V[\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x90`\x02\x02\x01_\x90\x91\x90\x91\x90\x91P\x81\x81a\r\xB8\x91\x90aGNV[PP\x80\x80`\x01\x01\x91PPa\rCV[P\x82\x85`\x04\x01_\x8C\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x89\x85`\t\x01\x81\x90UP\x7F\xEB\x85\xC2m\xBC\xADF\xB8\nh\xA0\xF2L\xCE|,\x90\xF0\xA1\xFA\xDE\xD8A\x84\x13\x889\xFC\x9E\x80\xA2[\x8A\x82\x8B\x8B`@Qa\x0E\x1E\x94\x93\x92\x91\x90aI-V[`@Q\x80\x91\x03\x90\xA1[PPPPPPPPPPV[a\x0E;a#\x81V[a\x0ED\x82a$gV[a\x0EN\x82\x82a%ZV[PPV[_a\x0E[a&xV[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\xD0\x91\x90aA\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E\xEBW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0F\x0F\x91\x90aB\x87V[a\x0FPW3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x0FG\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[_a\x0FYa\x1D\xD7V[\x90P_a\x0Fe\x85a&\xFFV[\x90P_a\x0Fs\x82\x86\x86a 6V[\x90P\x82_\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x10\x13W\x85\x81`@Q\x7F3\xCA\x1F\xE3\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\x81R`\x04\x01a\x10\n\x92\x91\x90aB\xB2V[`@Q\x80\x91\x03\x90\xFD[`\x01\x83_\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_\x83`\x02\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x84\x81R` \x01\x90\x81R` \x01_ \x90P\x803\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x83`\x01\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x112WPa\x111\x81\x80T\x90Pa\"\xF0V[[\x15a\x11\xCCW`\x01\x84`\x01\x01_\x89\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x82\x84`\x04\x01_\x89\x81R` \x01\x90\x81R` \x01_ \x81\x90UP_\x84`\x07\x01_\x89\x81R` \x01\x90\x81R` \x01_ T\x90P\x7Fx\xB1y\x17m\x1F\x19\xD7\xC2\x8E\x80\x82=\xEB\xA2bM\xA2\xCA.\xC6K\x17\x01\xF3c*\x87\xC9\xAE\xDC\x92\x88\x82`@Qa\x11\xC2\x92\x91\x90aIrV[`@Q\x80\x91\x03\x90\xA1P[PPPPPPPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x12\"\x91\x90aA\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x12=W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x12a\x91\x90aB\x87V[a\x12\xA2W3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x12\x99\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[_a\x12\xABa\x1D\xD7V[\x90P_\x81`\x0B\x01_\x88\x81R` \x01\x90\x81R` \x01_ T\x90P_a\x12\xD1\x88\x83\x89\x89a'WV[\x90P_a\x12\xDF\x82\x87\x87a 6V[\x90P\x83_\x01_\x8A\x81R` \x01\x90\x81R` \x01_ _\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x13\x7FW\x88\x81`@Q\x7F\xFC\xF5\xA6\xE9\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\x81R`\x04\x01a\x13v\x92\x91\x90aB\xB2V[`@Q\x80\x91\x03\x90\xFD[`\x01\x84_\x01_\x8B\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_a\x13\xEF\x8A\x84a \x9BV[\x90P\x84`\x01\x01_\x8B\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x14$WPa\x14#\x81Qa\"\xF0V[[\x15a\x14\xD6W`\x01\x85`\x01\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x88\x88\x86`\x0C\x01_\x8D\x81R` \x01\x90\x81R` \x01_ \x91\x82a\x14v\x92\x91\x90aF-V[P\x82\x85`\x04\x01_\x8C\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x89\x85`\r\x01\x81\x90UP\x7F\"X\xB7?\xAE\xD3?\xB2\xE2\xEAED\x03\xBE\xF9t\x92\x0C\xAFh*\xB3\xA7#HO\xCFgU;\x16\xA2\x8A\x82\x8B\x8B`@Qa\x14\xCD\x94\x93\x92\x91\x90aI\xC5V[`@Q\x80\x91\x03\x90\xA1[PPPPPPPPPPV[_``\x80_\x80_``_a\x14\xF4a'\xDEV[\x90P_\x80\x1B\x81_\x01T\x14\x80\x15a\x15\x0FWP_\x80\x1B\x81`\x01\x01T\x14[a\x15NW`@Q\x7F\x08\xC3y\xA0\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\x81R`\x04\x01a\x15E\x90aJTV[`@Q\x80\x91\x03\x90\xFD[a\x15Va(\x05V[a\x15^a(\xA3V[F0_\x80\x1B_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x15}Wa\x15|a86V[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x15\xABW\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x7F\x0F\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\x95\x94\x93\x92\x91\x90\x97P\x97P\x97P\x97P\x97P\x97P\x97PP\x90\x91\x92\x93\x94\x95\x96V[``\x80_a\x15\xF7a\x1D\xD7V[\x90P\x80`\x01\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\x16ZW\x83`@Q\x7F\x84\xDE\x131\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\x81R`\x04\x01a\x16Q\x91\x90a?)V[`@Q\x80\x91\x03\x90\xFD[_\x81`\x04\x01_\x86\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x03\x01_\x86\x81R` \x01\x90\x81R` \x01_ _\x82\x81R` \x01\x90\x81R` \x01_ \x82`\x08\x01_\x87\x81R` \x01\x90\x81R` \x01_ \x81\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01_\x90[\x82\x82\x10\x15a\x17nW\x83\x82\x90_R` _ \x01\x80Ta\x16\xE3\x90aD`V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x17\x0F\x90aD`V[\x80\x15a\x17ZW\x80`\x1F\x10a\x171Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x17ZV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x17=W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81R` \x01\x90`\x01\x01\x90a\x16\xC6V[PPPP\x91P\x80\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01_\x90[\x82\x82\x10\x15a\x18\x8DW\x83\x82\x90_R` _ \x90`\x02\x02\x01`@Q\x80`@\x01`@R\x90\x81_\x82\x01_\x90T\x90a\x01\0\n\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x17\xD8Wa\x17\xD7a5\xD4V[[`\x01\x81\x11\x15a\x17\xEAWa\x17\xE9a5\xD4V[[\x81R` \x01`\x01\x82\x01\x80Ta\x17\xFE\x90aD`V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x18*\x90aD`V[\x80\x15a\x18uW\x80`\x1F\x10a\x18LWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x18uV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x18XW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x81R` \x01\x90`\x01\x01\x90a\x17\x94V[PPPP\x90P\x93P\x93PPP\x91P\x91V[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[_\x80a\x18\xE1a\x1D\xD7V[\x90P\x80`\r\x01T\x91PP\x90V[``\x80_a\x18\xFAa\x1D\xD7V[\x90P\x80`\x01\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\x19]W\x83`@Q\x7F\xDA2\xD0\x0F\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\x81R`\x04\x01a\x19T\x91\x90a?)V[`@Q\x80\x91\x03\x90\xFD[_\x81`\x04\x01_\x86\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x03\x01_\x86\x81R` \x01\x90\x81R` \x01_ _\x82\x81R` \x01\x90\x81R` \x01_ \x82`\x0C\x01_\x87\x81R` \x01\x90\x81R` \x01_ \x81\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01_\x90[\x82\x82\x10\x15a\x1AqW\x83\x82\x90_R` _ \x01\x80Ta\x19\xE6\x90aD`V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x1A\x12\x90aD`V[\x80\x15a\x1A]W\x80`\x1F\x10a\x1A4Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x1A]V[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x1A@W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81R` \x01\x90`\x01\x01\x90a\x19\xC9V[PPPP\x91P\x80\x80Ta\x1A\x83\x90aD`V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x1A\xAF\x90aD`V[\x80\x15a\x1A\xFAW\x80`\x1F\x10a\x1A\xD1Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x1A\xFAV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x1A\xDDW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x93P\x93PPP\x91P\x91V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1BiW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1B\x8D\x91\x90aAeV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x1B\xFCW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\x1B\xF3\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[_a\x1C\x05a\x1D\xD7V[\x90P\x80`\x05\x01_\x81T\x80\x92\x91\x90a\x1C\x1B\x90aA\xD6V[\x91\x90PUP_\x81`\x05\x01T\x90P\x81`\x06\x01_\x81T\x80\x92\x91\x90a\x1C<\x90aA\xD6V[\x91\x90PUP_\x82`\x06\x01T\x90P\x80\x83`\x07\x01_\x84\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x81\x83`\x07\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP_\x84\x84`\x0E\x01_\x85\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83`\x01\x81\x11\x15a\x1C\xAFWa\x1C\xAEa5\xD4V[[\x02\x17\x90UP\x7F\x02\x02@\x07\xD9et\xDB\xC9\xD1\x13(\xBF\xEE\x98\x93\xE7\xC7\xBBN\xF4\xAA\x80m\xF3;\xFD\xF4T\xEB^`\x83\x82\x87`@Qa\x1C\xE7\x93\x92\x91\x90aB\x1DV[`@Q\x80\x91\x03\x90\xA1PPPPPV[_\x80a\x1D\0a\x1D\xD7V[\x90P\x80`\t\x01T\x91PP\x90V[``_`\x01a\x1D\x1B\x84a)AV[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1D9Wa\x1D8a86V[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x1DkW\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a\x1D\xCCW\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a\x1D\xC1Wa\x1D\xC0aJrV[[\x04\x94P_\x85\x03a\x1DxW[\x81\x93PPPP\x91\x90PV[_\x7F\x0B\x8F\xDB\x1F\ncV\xDD \xA6\xCB\xC6\xF9f\x8F\xAC#\xB8_\x96W]\x10\xE33\xE6\x03\xFA\xA7\x94\xAC\0\x90P\x90V[_a\x1E\x07a\x1E\"V[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[a\x1EQa*\x92V[a\x1E[\x82\x82a*\xD2V[PPV[_\x80\x83\x83\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1E~Wa\x1E}a86V[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1E\xACW\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_[\x84\x84\x90P\x81\x10\x15a\x1F\xB0W`@Q\x80``\x01`@R\x80`%\x81R` \x01aQ\xB4`%\x919\x80Q\x90` \x01 \x85\x85\x83\x81\x81\x10a\x1E\xEFWa\x1E\xEEaB\xD9V[[\x90P` \x02\x81\x01\x90a\x1F\x01\x91\x90aC\x12V[_\x01` \x81\x01\x90a\x1F\x12\x91\x90aJ\x9FV[\x86\x86\x84\x81\x81\x10a\x1F%Wa\x1F$aB\xD9V[[\x90P` \x02\x81\x01\x90a\x1F7\x91\x90aC\x12V[\x80` \x01\x90a\x1FF\x91\x90aC\xC7V[`@Qa\x1FT\x92\x91\x90aJ\xF8V[`@Q\x80\x91\x03\x90 `@Q` \x01a\x1Fn\x93\x92\x91\x90aK\x1FV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x82\x82\x81Q\x81\x10a\x1F\x97Wa\x1F\x96aB\xD9V[[` \x02` \x01\x01\x81\x81RPP\x80\x80`\x01\x01\x91PPa\x1E\xB1V[Pa +`@Q\x80`\xA0\x01`@R\x80`r\x81R` \x01aQB`r\x919\x80Q\x90` \x01 \x87\x87\x84`@Q` \x01a\x1F\xE7\x91\x90aL\x05V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a \x10\x94\x93\x92\x91\x90aL\x1BV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a+#V[\x91PP\x94\x93PPPPV[_\x80a \x85\x85\x85\x85\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa+=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a!8\x91\x90aM\xB1V[``\x01Q\x90P_\x82`\x02\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x86\x81R` \x01\x90\x81R` \x01_ \x90P\x803\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP_\x83`\x03\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x87\x81R` \x01\x90\x81R` \x01_ \x90P\x80\x83\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91P\x90\x81a\"\x17\x91\x90aNPV[P\x80\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01_\x90[\x82\x82\x10\x15a\"\xE0W\x83\x82\x90_R` _ \x01\x80Ta\"U\x90aD`V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\"\x81\x90aD`V[\x80\x15a\"\xCCW\x80`\x1F\x10a\"\xA3Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\"\xCCV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\"\xAFW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81R` \x01\x90`\x01\x01\x90a\"8V[PPPP\x94PPPPP\x92\x91PPV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xB4r+\xC4`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a#OW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a#s\x91\x90aO3V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a$.WP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a$\x15a,6V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a$eW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a$\xC4W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a$\xE8\x91\x90aAeV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a%WW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a%N\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a%\xC2WP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a%\xBF\x91\x90aO\x88V[`\x01[a&\x03W\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a%\xFA\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a&iW\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a&`\x91\x90a9\xCCV[`@Q\x80\x91\x03\x90\xFD[a&s\x83\x83a,\x89V[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a&\xFDW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_a'P`@Q\x80``\x01`@R\x80`,\x81R` \x01aQ\x16`,\x919\x80Q\x90` \x01 \x83`@Q` \x01a'5\x92\x91\x90aO\xB3V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a+#V[\x90P\x91\x90PV[_a'\xD4`@Q\x80`\x80\x01`@R\x80`F\x81R` \x01aP\xD0`F\x919\x80Q\x90` \x01 \x86\x86\x86\x86`@Q` \x01a'\x90\x92\x91\x90aJ\xF8V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a'\xB9\x94\x93\x92\x91\x90aL\x1BV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a+#V[\x90P\x94\x93PPPPV[_\x7F\xA1jF\xD9Ba\xC7Q|\xC8\xFF\x89\xF6\x1C\x0C\xE95\x98\xE3\xC8I\x80\x10\x11\xDE\xE6I\xA6\xA5W\xD1\0\x90P\x90V[``_a(\x10a'\xDEV[\x90P\x80`\x02\x01\x80Ta(!\x90aD`V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta(M\x90aD`V[\x80\x15a(\x98W\x80`\x1F\x10a(oWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a(\x98V[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a({W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[``_a(\xAEa'\xDEV[\x90P\x80`\x03\x01\x80Ta(\xBF\x90aD`V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta(\xEB\x90aD`V[\x80\x15a)6W\x80`\x1F\x10a)\rWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a)6V[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a)\x19W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a)\x9DWz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a)\x93Wa)\x92aJrV[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a)\xDAWm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a)\xD0Wa)\xCFaJrV[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a*\tWf#\x86\xF2o\xC1\0\0\x83\x81a)\xFFWa)\xFEaJrV[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a*2Wc\x05\xF5\xE1\0\x83\x81a*(Wa*'aJrV[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a*WWa'\x10\x83\x81a*MWa*LaJrV[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a*zW`d\x83\x81a*pWa*oaJrV[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a*\x89W`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[a*\x9Aa,\xFBV[a*\xD0W`@Q\x7F\xD7\xE6\xBC\xF8\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[a*\xDAa*\x92V[_a*\xE3a'\xDEV[\x90P\x82\x81`\x02\x01\x90\x81a*\xF6\x91\x90aNPV[P\x81\x81`\x03\x01\x90\x81a+\x08\x91\x90aNPV[P_\x80\x1B\x81_\x01\x81\x90UP_\x80\x1B\x81`\x01\x01\x81\x90UPPPPV[_a+5a+/a-\x19V[\x83a-'V[\x90P\x91\x90PV[_\x80_\x80a+J\x86\x86a-gV[\x92P\x92P\x92Pa+Z\x82\x82a-\xBCV[\x82\x93PPPP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c =\x01\x14\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a+\xB3\x91\x90aA\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a+\xCEW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a+\xF2\x91\x90aB\x87V[a,3W\x80`@Q\x7F*|n\xF6\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\x81R`\x04\x01a,*\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[PV[_a,b\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba/\x1EV[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a,\x92\x82a/'V[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a,\xEEWa,\xE8\x82\x82a/\xF0V[Pa,\xF7V[a,\xF6a0pV[[PPV[_a-\x04a\x1E\"V[_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x90P\x90V[_a-\"a0\xACV[\x90P\x90V[_`@Q\x7F\x19\x01\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\x81R\x83`\x02\x82\x01R\x82`\"\x82\x01R`B\x81 \x91PP\x92\x91PPV[_\x80_`A\x84Q\x03a-\xA7W_\x80_` \x87\x01Q\x92P`@\x87\x01Q\x91P``\x87\x01Q_\x1A\x90Pa-\x99\x88\x82\x85\x85a1\x0FV[\x95P\x95P\x95PPPPa-\xB5V[_`\x02\x85Q_\x1B\x92P\x92P\x92P[\x92P\x92P\x92V[_`\x03\x81\x11\x15a-\xCFWa-\xCEa5\xD4V[[\x82`\x03\x81\x11\x15a-\xE2Wa-\xE1a5\xD4V[[\x03\x15a/\x1AW`\x01`\x03\x81\x11\x15a-\xFCWa-\xFBa5\xD4V[[\x82`\x03\x81\x11\x15a.\x0FWa.\x0Ea5\xD4V[[\x03a.FW`@Q\x7F\xF6E\xEE\xDF\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02`\x03\x81\x11\x15a.ZWa.Ya5\xD4V[[\x82`\x03\x81\x11\x15a.mWa.la5\xD4V[[\x03a.\xB1W\x80_\x1C`@Q\x7F\xFC\xE6\x98\xF7\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\x81R`\x04\x01a.\xA8\x91\x90a?)V[`@Q\x80\x91\x03\x90\xFD[`\x03\x80\x81\x11\x15a.\xC4Wa.\xC3a5\xD4V[[\x82`\x03\x81\x11\x15a.\xD7Wa.\xD6a5\xD4V[[\x03a/\x19W\x80`@Q\x7F\xD7\x8B\xCE\x0C\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\x81R`\x04\x01a/\x10\x91\x90a9\xCCV[`@Q\x80\x91\x03\x90\xFD[[PPV[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a/\x82W\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a/y\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[\x80a/\xAE\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba/\x1EV[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa0\x19\x91\x90aP\nV[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a0QW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a0VV[``\x91P[P\x91P\x91Pa0f\x85\x83\x83a1\xF6V[\x92PPP\x92\x91PPV[_4\x11\x15a0\xAAW`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0Fa0\xD6a2\x83V[a0\xDEa2\xF9V[F0`@Q` \x01a0\xF4\x95\x94\x93\x92\x91\x90aP V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x90V[_\x80_\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF]WnsW\xA4P\x1D\xDF\xE9/Fh\x1B \xA0\x84_\x1C\x11\x15a1KW_`\x03\x85\x92P\x92P\x92Pa1\xECV[_`\x01\x88\x88\x88\x88`@Q_\x81R` \x01`@R`@Qa1n\x94\x93\x92\x91\x90aP\x8CV[` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a1\x8EW=_\x80>=_\xFD[PPP` `@Q\x03Q\x90P_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x03a1\xDFW_`\x01_\x80\x1B\x93P\x93P\x93PPa1\xECV[\x80_\x80_\x1B\x93P\x93P\x93PP[\x94P\x94P\x94\x91PPV[``\x82a2\x0BWa2\x06\x82a3pV[a2{V[_\x82Q\x14\x80\x15a21WP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a2sW\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a2j\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa2|V[[\x93\x92PPPV[_\x80a2\x8Da'\xDEV[\x90P_a2\x98a(\x05V[\x90P_\x81Q\x11\x15a2\xB4W\x80\x80Q\x90` \x01 \x92PPPa2\xF6V[_\x82_\x01T\x90P_\x80\x1B\x81\x14a2\xCFW\x80\x93PPPPa2\xF6V[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x80a3\x03a'\xDEV[\x90P_a3\x0Ea(\xA3V[\x90P_\x81Q\x11\x15a3*W\x80\x80Q\x90` \x01 \x92PPPa3mV[_\x82`\x01\x01T\x90P_\x80\x1B\x81\x14a3FW\x80\x93PPPPa3mV[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x81Q\x11\x15a3\x82W\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15a3\xEBW\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa3\xD0V[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a4\x10\x82a3\xB4V[a4\x1A\x81\x85a3\xBEV[\x93Pa4*\x81\x85` \x86\x01a3\xCEV[a43\x81a3\xF6V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra4V\x81\x84a4\x06V[\x90P\x92\x91PPV[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[a4\x81\x81a4oV[\x81\x14a4\x8BW_\x80\xFD[PV[_\x815\x90Pa4\x9C\x81a4xV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a4\xB7Wa4\xB6a4gV[[_a4\xC4\x84\x82\x85\x01a4\x8EV[\x91PP\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a5\x1F\x82a4\xF6V[\x90P\x91\x90PV[a5/\x81a5\x15V[\x82RPPV[_a5@\x83\x83a5&V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a5b\x82a4\xCDV[a5l\x81\x85a4\xD7V[\x93Pa5w\x83a4\xE7V[\x80_[\x83\x81\x10\x15a5\xA7W\x81Qa5\x8E\x88\x82a55V[\x97Pa5\x99\x83a5LV[\x92PP`\x01\x81\x01\x90Pa5zV[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra5\xCC\x81\x84a5XV[\x90P\x92\x91PPV[\x7FNH{q\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_R`!`\x04R`$_\xFD[`\x02\x81\x10a6\x12Wa6\x11a5\xD4V[[PV[_\x81\x90Pa6\"\x82a6\x01V[\x91\x90PV[_a61\x82a6\x15V[\x90P\x91\x90PV[a6A\x81a6'V[\x82RPPV[_` \x82\x01\x90Pa6Z_\x83\x01\x84a68V[\x92\x91PPV[`\x02\x81\x10a6lW_\x80\xFD[PV[_\x815\x90Pa6}\x81a6`V[\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a6\x99Wa6\x98a4gV[[_a6\xA6\x85\x82\x86\x01a4\x8EV[\x92PP` a6\xB7\x85\x82\x86\x01a6oV[\x91PP\x92P\x92\x90PV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12a6\xE2Wa6\xE1a6\xC1V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a6\xFFWa6\xFEa6\xC5V[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15a7\x1BWa7\x1Aa6\xC9V[[\x92P\x92\x90PV[_\x80\x83`\x1F\x84\x01\x12a77Wa76a6\xC1V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a7TWa7Sa6\xC5V[[` \x83\x01\x91P\x83`\x01\x82\x02\x83\x01\x11\x15a7pWa7oa6\xC9V[[\x92P\x92\x90PV[_\x80_\x80_``\x86\x88\x03\x12\x15a7\x90Wa7\x8Fa4gV[[_a7\x9D\x88\x82\x89\x01a4\x8EV[\x95PP` \x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a7\xBEWa7\xBDa4kV[[a7\xCA\x88\x82\x89\x01a6\xCDV[\x94P\x94PP`@\x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a7\xEDWa7\xECa4kV[[a7\xF9\x88\x82\x89\x01a7\"V[\x92P\x92PP\x92\x95P\x92\x95\x90\x93PV[a8\x11\x81a5\x15V[\x81\x14a8\x1BW_\x80\xFD[PV[_\x815\x90Pa8,\x81a8\x08V[\x92\x91PPV[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[a8l\x82a3\xF6V[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a8\x8BWa8\x8Aa86V[[\x80`@RPPPV[_a8\x9Da4^V[\x90Pa8\xA9\x82\x82a8cV[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a8\xC8Wa8\xC7a86V[[a8\xD1\x82a3\xF6V[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_a8\xFEa8\xF9\x84a8\xAEV[a8\x94V[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15a9\x1AWa9\x19a82V[[a9%\x84\x82\x85a8\xDEV[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12a9AWa9@a6\xC1V[[\x815a9Q\x84\x82` \x86\x01a8\xECV[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a9pWa9oa4gV[[_a9}\x85\x82\x86\x01a8\x1EV[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a9\x9EWa9\x9Da4kV[[a9\xAA\x85\x82\x86\x01a9-V[\x91PP\x92P\x92\x90PV[_\x81\x90P\x91\x90PV[a9\xC6\x81a9\xB4V[\x82RPPV[_` \x82\x01\x90Pa9\xDF_\x83\x01\x84a9\xBDV[\x92\x91PPV[_\x80_`@\x84\x86\x03\x12\x15a9\xFCWa9\xFBa4gV[[_a:\t\x86\x82\x87\x01a4\x8EV[\x93PP` \x84\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a:*Wa:)a4kV[[a:6\x86\x82\x87\x01a7\"V[\x92P\x92PP\x92P\x92P\x92V[_\x80_\x80_``\x86\x88\x03\x12\x15a:[Wa:Za4gV[[_a:h\x88\x82\x89\x01a4\x8EV[\x95PP` \x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a:\x89Wa:\x88a4kV[[a:\x95\x88\x82\x89\x01a7\"V[\x94P\x94PP`@\x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a:\xB8Wa:\xB7a4kV[[a:\xC4\x88\x82\x89\x01a7\"V[\x92P\x92PP\x92\x95P\x92\x95\x90\x93PV[_\x7F\xFF\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\x82\x16\x90P\x91\x90PV[a;\x07\x81a:\xD3V[\x82RPPV[a;\x16\x81a4oV[\x82RPPV[a;%\x81a5\x15V[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a;]\x81a4oV[\x82RPPV[_a;n\x83\x83a;TV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a;\x90\x82a;+V[a;\x9A\x81\x85a;5V[\x93Pa;\xA5\x83a;EV[\x80_[\x83\x81\x10\x15a;\xD5W\x81Qa;\xBC\x88\x82a;cV[\x97Pa;\xC7\x83a;zV[\x92PP`\x01\x81\x01\x90Pa;\xA8V[P\x85\x93PPPP\x92\x91PPV[_`\xE0\x82\x01\x90Pa;\xF5_\x83\x01\x8Aa:\xFEV[\x81\x81\x03` \x83\x01Ra<\x07\x81\x89a4\x06V[\x90P\x81\x81\x03`@\x83\x01Ra<\x1B\x81\x88a4\x06V[\x90Pa<*``\x83\x01\x87a;\rV[a<7`\x80\x83\x01\x86a;\x1CV[a\x04\x81\x85a=\xE0V[\x93Pa>\x14\x81\x85` \x86\x01a3\xCEV[a>\x1D\x81a3\xF6V[\x84\x01\x91PP\x92\x91PPV[_`@\x83\x01_\x83\x01Qa>=_\x86\x01\x82a=\xC7V[P` \x83\x01Q\x84\x82\x03` \x86\x01Ra>U\x82\x82a=\xF0V[\x91PP\x80\x91PP\x92\x91PPV[_a>m\x83\x83a>(V[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a>\x8B\x82a=gV[a>\x95\x81\x85a=qV[\x93P\x83` \x82\x02\x85\x01a>\xA7\x85a=\x81V[\x80_[\x85\x81\x10\x15a>\xE2W\x84\x84\x03\x89R\x81Qa>\xC3\x85\x82a>bV[\x94Pa>\xCE\x83a>uV[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90Pa>\xAAV[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_`@\x82\x01\x90P\x81\x81\x03_\x83\x01Ra?\x0C\x81\x85a<\xF4V[\x90P\x81\x81\x03` \x83\x01Ra? \x81\x84a>\x81V[\x90P\x93\x92PPPV[_` \x82\x01\x90Pa?<_\x83\x01\x84a;\rV[\x92\x91PPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_a?\\\x82a=\xD6V[a?f\x81\x85a?BV[\x93Pa?v\x81\x85` \x86\x01a3\xCEV[a?\x7F\x81a3\xF6V[\x84\x01\x91PP\x92\x91PPV[_`@\x82\x01\x90P\x81\x81\x03_\x83\x01Ra?\xA2\x81\x85a<\xF4V[\x90P\x81\x81\x03` \x83\x01Ra?\xB6\x81\x84a?RV[\x90P\x93\x92PPPV[_` \x82\x84\x03\x12\x15a?\xD4Wa?\xD3a4gV[[_a?\xE1\x84\x82\x85\x01a6oV[\x91PP\x92\x91PPV[_\x81\x90P\x92\x91PPV[_a?\xFE\x82a3\xB4V[a@\x08\x81\x85a?\xEAV[\x93Pa@\x18\x81\x85` \x86\x01a3\xCEV[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_a@X`\x02\x83a?\xEAV[\x91Pa@c\x82a@$V[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_a@\xA2`\x01\x83a?\xEAV[\x91Pa@\xAD\x82a@nV[`\x01\x82\x01\x90P\x91\x90PV[_a@\xC3\x82\x87a?\xF4V[\x91Pa@\xCE\x82a@LV[\x91Pa@\xDA\x82\x86a?\xF4V[\x91Pa@\xE5\x82a@\x96V[\x91Pa@\xF1\x82\x85a?\xF4V[\x91Pa@\xFC\x82a@\x96V[\x91PaA\x08\x82\x84a?\xF4V[\x91P\x81\x90P\x95\x94PPPPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[aA2\x81aA\x16V[\x82RPPV[_` \x82\x01\x90PaAK_\x83\x01\x84aA)V[\x92\x91PPV[_\x81Q\x90PaA_\x81a8\x08V[\x92\x91PPV[_` \x82\x84\x03\x12\x15aAzWaAya4gV[[_aA\x87\x84\x82\x85\x01aAQV[\x91PP\x92\x91PPV[_` \x82\x01\x90PaA\xA3_\x83\x01\x84a;\x1CV[\x92\x91PPV[\x7FNH{q\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_R`\x11`\x04R`$_\xFD[_aA\xE0\x82a4oV[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03aB\x12WaB\x11aA\xA9V[[`\x01\x82\x01\x90P\x91\x90PV[_``\x82\x01\x90PaB0_\x83\x01\x86a;\rV[aB=` \x83\x01\x85a;\rV[aBJ`@\x83\x01\x84a68V[\x94\x93PPPPV[_\x81\x15\x15\x90P\x91\x90PV[aBf\x81aBRV[\x81\x14aBpW_\x80\xFD[PV[_\x81Q\x90PaB\x81\x81aB]V[\x92\x91PPV[_` \x82\x84\x03\x12\x15aB\x9CWaB\x9Ba4gV[[_aB\xA9\x84\x82\x85\x01aBsV[\x91PP\x92\x91PPV[_`@\x82\x01\x90PaB\xC5_\x83\x01\x85a;\rV[aB\xD2` \x83\x01\x84a;\x1CV[\x93\x92PPPV[\x7FNH{q\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_R`2`\x04R`$_\xFD[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x825`\x01`@\x03\x836\x03\x03\x81\x12aC-WaC,aC\x06V[[\x80\x83\x01\x91PP\x92\x91PPV[`\x02\x81\x10aCEW_\x80\xFD[PV[_\x815aCT\x81aC9V[\x80\x91PP\x91\x90PV[_\x81_\x1B\x90P\x91\x90PV[_`\xFFaCt\x84aC]V[\x93P\x80\x19\x83\x16\x92P\x80\x84\x16\x83\x17\x91PP\x92\x91PPV[_aC\x94\x82a=\xA4V[\x90P\x91\x90PV[_\x81\x90P\x91\x90PV[aC\xAD\x82aC\x8AV[aC\xC0aC\xB9\x82aC\x9BV[\x83TaChV[\x82UPPPV[_\x80\x835`\x01` \x03\x846\x03\x03\x81\x12aC\xE3WaC\xE2aC\x06V[[\x80\x84\x01\x92P\x825\x91Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aD\x05WaD\x04aC\nV[[` \x83\x01\x92P`\x01\x82\x026\x03\x83\x13\x15aD!WaD aC\x0EV[[P\x92P\x92\x90PV[_\x82\x90P\x92\x91PPV[\x7FNH{q\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_R`\"`\x04R`$_\xFD[_`\x02\x82\x04\x90P`\x01\x82\x16\x80aDwW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03aD\x8AWaD\x89aD3V[[P\x91\x90PV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_` `\x1F\x83\x01\x04\x90P\x91\x90PV[_\x82\x82\x1B\x90P\x92\x91PPV[_`\x08\x83\x02aD\xEC\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82aD\xB1V[aD\xF6\x86\x83aD\xB1V[\x95P\x80\x19\x84\x16\x93P\x80\x86\x16\x84\x17\x92PPP\x93\x92PPPV[_\x81\x90P\x91\x90PV[_aE1aE,aE'\x84a4oV[aE\x0EV[a4oV[\x90P\x91\x90PV[_\x81\x90P\x91\x90PV[aEJ\x83aE\x17V[aE^aEV\x82aE8V[\x84\x84TaD\xBDV[\x82UPPPPV[_\x90V[aEraEfV[aE}\x81\x84\x84aEAV[PPPV[[\x81\x81\x10\x15aE\xA0WaE\x95_\x82aEjV[`\x01\x81\x01\x90PaE\x83V[PPV[`\x1F\x82\x11\x15aE\xE5WaE\xB6\x81aD\x90V[aE\xBF\x84aD\xA2V[\x81\x01` \x85\x10\x15aE\xCEW\x81\x90P[aE\xE2aE\xDA\x85aD\xA2V[\x83\x01\x82aE\x82V[PP[PPPV[_\x82\x82\x1C\x90P\x92\x91PPV[_aF\x05_\x19\x84`\x08\x02aE\xEAV[\x19\x80\x83\x16\x91PP\x92\x91PPV[_aF\x1D\x83\x83aE\xF6V[\x91P\x82`\x02\x02\x82\x17\x90P\x92\x91PPV[aF7\x83\x83aD)V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aFPWaFOa86V[[aFZ\x82TaD`V[aFe\x82\x82\x85aE\xA4V[_`\x1F\x83\x11`\x01\x81\x14aF\x92W_\x84\x15aF\x80W\x82\x87\x015\x90P[aF\x8A\x85\x82aF\x12V[\x86UPaF\xF1V[`\x1F\x19\x84\x16aF\xA0\x86aD\x90V[_[\x82\x81\x10\x15aF\xC7W\x84\x89\x015\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90PaF\xA2V[\x86\x83\x10\x15aF\xE4W\x84\x89\x015aF\xE0`\x1F\x89\x16\x82aE\xF6V[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPPV[aG\x05\x83\x83\x83aF-V[PPPV[_\x81\x01_\x83\x01\x80aG\x1A\x81aCHV[\x90PaG&\x81\x84aC\xA4V[PPP`\x01\x81\x01` \x83\x01aG;\x81\x85aC\xC7V[aGF\x81\x83\x86aF\xFAV[PPPPPPV[aGX\x82\x82aG\nV[PPV[_\x81\x90P\x91\x90PV[_\x815\x90PaGs\x81aC9V[\x92\x91PPV[_aG\x87` \x84\x01\x84aGeV[\x90P\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x835`\x01` \x03\x846\x03\x03\x81\x12aG\xB7WaG\xB6aG\x97V[[\x83\x81\x01\x92P\x825\x91P` \x83\x01\x92Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aG\xDFWaG\xDEaG\x8FV[[`\x01\x82\x026\x03\x83\x13\x15aG\xF5WaG\xF4aG\x93V[[P\x92P\x92\x90PV[_aH\x08\x83\x85a=\xE0V[\x93PaH\x15\x83\x85\x84a8\xDEV[aH\x1E\x83a3\xF6V[\x84\x01\x90P\x93\x92PPPV[_`@\x83\x01aH:_\x84\x01\x84aGyV[aHF_\x86\x01\x82a=\xC7V[PaHT` \x84\x01\x84aG\x9BV[\x85\x83\x03` \x87\x01RaHg\x83\x82\x84aG\xFDV[\x92PPP\x80\x91PP\x92\x91PPV[_aH\x80\x83\x83aH)V[\x90P\x92\x91PPV[_\x825`\x01`@\x03\x836\x03\x03\x81\x12aH\xA3WaH\xA2aG\x97V[[\x82\x81\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aH\xC6\x83\x85a=qV[\x93P\x83` \x84\x02\x85\x01aH\xD8\x84aG\\V[\x80_[\x87\x81\x10\x15aI\x1BW\x84\x84\x03\x89RaH\xF2\x82\x84aH\x88V[aH\xFC\x85\x82aHuV[\x94PaI\x07\x83aH\xAFV[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90PaH\xDBV[P\x82\x97P\x87\x94PPPPP\x93\x92PPPV[_``\x82\x01\x90PaI@_\x83\x01\x87a;\rV[\x81\x81\x03` \x83\x01RaIR\x81\x86a<\xF4V[\x90P\x81\x81\x03`@\x83\x01RaIg\x81\x84\x86aH\xBBV[\x90P\x95\x94PPPPPV[_`@\x82\x01\x90PaI\x85_\x83\x01\x85a;\rV[aI\x92` \x83\x01\x84a;\rV[\x93\x92PPPV[_aI\xA4\x83\x85a?BV[\x93PaI\xB1\x83\x85\x84a8\xDEV[aI\xBA\x83a3\xF6V[\x84\x01\x90P\x93\x92PPPV[_``\x82\x01\x90PaI\xD8_\x83\x01\x87a;\rV[\x81\x81\x03` \x83\x01RaI\xEA\x81\x86a<\xF4V[\x90P\x81\x81\x03`@\x83\x01RaI\xFF\x81\x84\x86aI\x99V[\x90P\x95\x94PPPPPV[\x7FEIP712: Uninitialized\0\0\0\0\0\0\0\0\0\0\0_\x82\x01RPV[_aJ>`\x15\x83a3\xBEV[\x91PaJI\x82aJ\nV[` \x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01RaJk\x81aJ2V[\x90P\x91\x90PV[\x7FNH{q\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_R`\x12`\x04R`$_\xFD[_` \x82\x84\x03\x12\x15aJ\xB4WaJ\xB3a4gV[[_aJ\xC1\x84\x82\x85\x01aGeV[\x91PP\x92\x91PPV[_\x81\x90P\x92\x91PPV[_aJ\xDF\x83\x85aJ\xCAV[\x93PaJ\xEC\x83\x85\x84a8\xDEV[\x82\x84\x01\x90P\x93\x92PPPV[_aK\x04\x82\x84\x86aJ\xD4V[\x91P\x81\x90P\x93\x92PPPV[aK\x19\x81a=\xB6V[\x82RPPV[_``\x82\x01\x90PaK2_\x83\x01\x86a9\xBDV[aK?` \x83\x01\x85aK\x10V[aKL`@\x83\x01\x84a9\xBDV[\x94\x93PPPPV[_\x81Q\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[aK\x80\x81a9\xB4V[\x82RPPV[_aK\x91\x83\x83aKwV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aK\xB3\x82aKTV[aK\xBD\x81\x85aK^V[\x93PaK\xC8\x83aKhV[\x80_[\x83\x81\x10\x15aK\xF8W\x81QaK\xDF\x88\x82aK\x86V[\x97PaK\xEA\x83aK\x9DV[\x92PP`\x01\x81\x01\x90PaK\xCBV[P\x85\x93PPPP\x92\x91PPV[_aL\x10\x82\x84aK\xA9V[\x91P\x81\x90P\x92\x91PPV[_`\x80\x82\x01\x90PaL._\x83\x01\x87a9\xBDV[aL;` \x83\x01\x86a;\rV[aLH`@\x83\x01\x85a;\rV[aLU``\x83\x01\x84a9\xBDV[\x95\x94PPPPPV[_\x80\xFD[_\x80\xFD[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aL\x80WaL\x7Fa86V[[aL\x89\x82a3\xF6V[\x90P` \x81\x01\x90P\x91\x90PV[_aL\xA8aL\xA3\x84aLfV[a8\x94V[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15aL\xC4WaL\xC3a82V[[aL\xCF\x84\x82\x85a3\xCEV[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12aL\xEBWaL\xEAa6\xC1V[[\x81QaL\xFB\x84\x82` \x86\x01aL\x96V[\x91PP\x92\x91PPV[_`\x80\x82\x84\x03\x12\x15aM\x19WaM\x18aL^V[[aM#`\x80a8\x94V[\x90P_aM2\x84\x82\x85\x01aAQV[_\x83\x01RP` aME\x84\x82\x85\x01aAQV[` \x83\x01RP`@\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aMiWaMhaLbV[[aMu\x84\x82\x85\x01aL\xD7V[`@\x83\x01RP``\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aM\x99WaM\x98aLbV[[aM\xA5\x84\x82\x85\x01aL\xD7V[``\x83\x01RP\x92\x91PPV[_` \x82\x84\x03\x12\x15aM\xC6WaM\xC5a4gV[[_\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aM\xE3WaM\xE2a4kV[[aM\xEF\x84\x82\x85\x01aM\x04V[\x91PP\x92\x91PPV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[`\x1F\x82\x11\x15aNKWaN\x1C\x81aM\xF8V[aN%\x84aD\xA2V[\x81\x01` \x85\x10\x15aN4W\x81\x90P[aNHaN@\x85aD\xA2V[\x83\x01\x82aE\x82V[PP[PPPV[aNY\x82a3\xB4V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aNrWaNqa86V[[aN|\x82TaD`V[aN\x87\x82\x82\x85aN\nV[_` \x90P`\x1F\x83\x11`\x01\x81\x14aN\xB8W_\x84\x15aN\xA6W\x82\x87\x01Q\x90P[aN\xB0\x85\x82aF\x12V[\x86UPaO\x17V[`\x1F\x19\x84\x16aN\xC6\x86aM\xF8V[_[\x82\x81\x10\x15aN\xEDW\x84\x89\x01Q\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90PaN\xC8V[\x86\x83\x10\x15aO\nW\x84\x89\x01QaO\x06`\x1F\x89\x16\x82aE\xF6V[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPV[_\x81Q\x90PaO-\x81a4xV[\x92\x91PPV[_` \x82\x84\x03\x12\x15aOHWaOGa4gV[[_aOU\x84\x82\x85\x01aO\x1FV[\x91PP\x92\x91PPV[aOg\x81a9\xB4V[\x81\x14aOqW_\x80\xFD[PV[_\x81Q\x90PaO\x82\x81aO^V[\x92\x91PPV[_` \x82\x84\x03\x12\x15aO\x9DWaO\x9Ca4gV[[_aO\xAA\x84\x82\x85\x01aOtV[\x91PP\x92\x91PPV[_`@\x82\x01\x90PaO\xC6_\x83\x01\x85a9\xBDV[aO\xD3` \x83\x01\x84a;\rV[\x93\x92PPPV[_aO\xE4\x82a=\xD6V[aO\xEE\x81\x85aJ\xCAV[\x93PaO\xFE\x81\x85` \x86\x01a3\xCEV[\x80\x84\x01\x91PP\x92\x91PPV[_aP\x15\x82\x84aO\xDAV[\x91P\x81\x90P\x92\x91PPV[_`\xA0\x82\x01\x90PaP3_\x83\x01\x88a9\xBDV[aP@` \x83\x01\x87a9\xBDV[aPM`@\x83\x01\x86a9\xBDV[aPZ``\x83\x01\x85a;\rV[aPg`\x80\x83\x01\x84a;\x1CV[\x96\x95PPPPPPV[_`\xFF\x82\x16\x90P\x91\x90PV[aP\x86\x81aPqV[\x82RPPV[_`\x80\x82\x01\x90PaP\x9F_\x83\x01\x87a9\xBDV[aP\xAC` \x83\x01\x86aP}V[aP\xB9`@\x83\x01\x85a9\xBDV[aP\xC6``\x83\x01\x84a9\xBDV[\x95\x94PPPPPV\xFECrsgenVerification(uint256 crsId,uint256 maxBitLength,bytes crsDigest)PrepKeygenVerification(uint256 prepKeygenId)KeygenVerification(uint256 prepKeygenId,uint256 keyId,KeyDigest[] keyDigests)KeyDigest(uint8 keyType,bytes digest)KeyDigest(uint8 keyType,bytes digest)", + b"`\xA0`@R0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RP4\x80\x15b\0\0CW_\x80\xFD[Pb\0\0Tb\0\0Z` \x1B` \x1CV[b\0\x01\xC4V[_b\0\0kb\0\x01^` \x1B` \x1CV[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15b\0\0\xB6W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14b\0\x01[Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Qb\0\x01R\x91\x90b\0\x01\xA9V[`@Q\x80\x91\x03\x90\xA1[PV[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[b\0\x01\xA3\x81b\0\x01\x85V[\x82RPPV[_` \x82\x01\x90Pb\0\x01\xBE_\x83\x01\x84b\0\x01\x98V[\x92\x91PPV[`\x80QaU\x14b\0\x01\xEB_9_\x81\x81a&\xBE\x01R\x81\x81a'\x13\x01Ra)\xB5\x01RaU\x14_\xF3\xFE`\x80`@R`\x046\x10a\x01\x08W_5`\xE0\x1C\x80cX\x9A\xDB\x0E\x11a\0\x94W\x80c\xAD<\xB1\xCC\x11a\0cW\x80c\xAD<\xB1\xCC\x14a\x03SW\x80c\xBA\xFF!\x1E\x14a\x03}W\x80c\xC5[\x87$\x14a\x03\xA7W\x80c\xCA\xA3g\xDB\x14a\x03\xE4W\x80c\xD5/\x10\xEB\x14a\x04\x0CWa\x01\x08V[\x80cX\x9A\xDB\x0E\x14a\x02\x96W\x80cb\x97\x87\x87\x14a\x02\xBEW\x80c\x84\xB0\x19n\x14a\x02\xE6W\x80c\x93f\x08\xAE\x14a\x03\x16Wa\x01\x08V[\x80c<\x02\xF84\x11a\0\xDBW\x80c<\x02\xF84\x14a\x01\xC4W\x80cE\xAF&\x1B\x14a\x01\xECW\x80cF\x10\xFF\xE8\x14a\x02(W\x80cO\x1E\xF2\x86\x14a\x02PW\x80cR\xD1\x90-\x14a\x02lWa\x01\x08V[\x80c\r\x8En,\x14a\x01\x0CW\x80c\x16\xC7\x13\xD9\x14a\x016W\x80c\x19\xF4\xF62\x14a\x01rW\x80c9\xF78\x10\x14a\x01\xAEW[_\x80\xFD[4\x80\x15a\x01\x17W_\x80\xFD[Pa\x01 a\x046V[`@Qa\x01-\x91\x90a7yV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01AW_\x80\xFD[Pa\x01\\`\x04\x806\x03\x81\x01\x90a\x01W\x91\x90a7\xDDV[a\x04\xB1V[`@Qa\x01i\x91\x90a8\xEFV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01}W_\x80\xFD[Pa\x01\x98`\x04\x806\x03\x81\x01\x90a\x01\x93\x91\x90a7\xDDV[a\x05\x82V[`@Qa\x01\xA5\x91\x90a9\x82V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xB9W_\x80\xFD[Pa\x01\xC2a\x06/V[\0[4\x80\x15a\x01\xCFW_\x80\xFD[Pa\x01\xEA`\x04\x806\x03\x81\x01\x90a\x01\xE5\x91\x90a9\xBEV[a\x08~V[\0[4\x80\x15a\x01\xF7W_\x80\xFD[Pa\x02\x12`\x04\x806\x03\x81\x01\x90a\x02\r\x91\x90a7\xDDV[a\n-V[`@Qa\x02\x1F\x91\x90a9\x82V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x023W_\x80\xFD[Pa\x02N`\x04\x806\x03\x81\x01\x90a\x02I\x91\x90a:\xB2V[a\n\xC2V[\0[a\x02j`\x04\x806\x03\x81\x01\x90a\x02e\x91\x90a<\x95V[a\x10\x07V[\0[4\x80\x15a\x02wW_\x80\xFD[Pa\x02\x80a\x10&V[`@Qa\x02\x8D\x91\x90a=\x07V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\xA1W_\x80\xFD[Pa\x02\xBC`\x04\x806\x03\x81\x01\x90a\x02\xB7\x91\x90a= V[a\x10WV[\0[4\x80\x15a\x02\xC9W_\x80\xFD[Pa\x02\xE4`\x04\x806\x03\x81\x01\x90a\x02\xDF\x91\x90a=}V[a\x13\xA9V[\0[4\x80\x15a\x02\xF1W_\x80\xFD[Pa\x02\xFAa\x18\x8AV[`@Qa\x03\r\x97\x96\x95\x94\x93\x92\x91\x90a?\x1DV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03!W_\x80\xFD[Pa\x03<`\x04\x806\x03\x81\x01\x90a\x037\x91\x90a7\xDDV[a\x19\x93V[`@Qa\x03J\x92\x91\x90aB/V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03^W_\x80\xFD[Pa\x03ga\x1D:V[`@Qa\x03t\x91\x90a7yV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\x88W_\x80\xFD[Pa\x03\x91a\x1DsV[`@Qa\x03\x9E\x91\x90aBdV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\xB2W_\x80\xFD[Pa\x03\xCD`\x04\x806\x03\x81\x01\x90a\x03\xC8\x91\x90a7\xDDV[a\x1D\x8AV[`@Qa\x03\xDB\x92\x91\x90aB\xC5V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\xEFW_\x80\xFD[Pa\x04\n`\x04\x806\x03\x81\x01\x90a\x04\x05\x91\x90aB\xFAV[a \x9CV[\0[4\x80\x15a\x04\x17W_\x80\xFD[Pa\x04 a\"\x86V[`@Qa\x04-\x91\x90aBdV[`@Q\x80\x91\x03\x90\xF3[```@Q\x80`@\x01`@R\x80`\r\x81R` \x01\x7FKMSGeneration\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RPa\x04w_a\"\x9DV[a\x04\x81`\x01a\"\x9DV[a\x04\x8A_a\"\x9DV[`@Q` \x01a\x04\x9D\x94\x93\x92\x91\x90aC\xF3V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x90V[``_a\x04\xBCa#gV[\x90P_\x81`\x03\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x02\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x82\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x05tW` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x05+W[PPPPP\x92PPP\x91\x90PV[_\x80a\x05\x8Ca#gV[\x90P\x80`\x01\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\x05\xEFW\x82`@Q\x7F\x84\xDE\x131\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\x81R`\x04\x01a\x05\xE6\x91\x90aBdV[`@Q\x80\x91\x03\x90\xFD[_\x81`\x06\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\r\x01_\x82\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x92PPP\x91\x90PV[`\x01a\x069a#\x8EV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x06zW`@Q\x7FoOs\x1F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02_a\x06\x85a#\xB2V[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x80a\x06\xCDWP\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x15[\x15a\x07\x04W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`\x01\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPa\x07\xBD`@Q\x80`@\x01`@R\x80`\r\x81R` \x01\x7FKMSGeneration\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RP`@Q\x80`@\x01`@R\x80`\x01\x81R` \x01\x7F1\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\x81RPa#\xD9V[_a\x07\xC6a#gV[\x90P`\xF8`\x03`\x05\x81\x11\x15a\x07\xDEWa\x07\xDDa9\x0FV[[\x90\x1B\x81`\x04\x01\x81\x90UP`\xF8`\x04`\x05\x81\x11\x15a\x07\xFEWa\x07\xFDa9\x0FV[[\x90\x1B\x81`\x05\x01\x81\x90UP`\xF8`\x05\x80\x81\x11\x15a\x08\x1DWa\x08\x1Ca9\x0FV[[\x90\x1B\x81`\t\x01\x81\x90UPP_\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x82`@Qa\x08r\x91\x90aDsV[`@Q\x80\x91\x03\x90\xA1PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x08\xDBW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08\xFF\x91\x90aD\xA0V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\tnW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\te\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[_a\twa#gV[\x90P\x80`\t\x01_\x81T\x80\x92\x91\x90a\t\x8D\x90aE\x11V[\x91\x90PUP_\x81`\t\x01T\x90P\x83\x82`\n\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x82\x82`\r\x01_\x83\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83`\x01\x81\x11\x15a\t\xE7Wa\t\xE6a9\x0FV[[\x02\x17\x90UP\x7F?\x03\x8Fo\x88\xCB01\xB7q\x85\x88@:.\xC2 Wj\x86\x8B\xE0}\xDEL\x02\xB8F\xCA5.\xF5\x81\x85\x85`@Qa\n\x1F\x93\x92\x91\x90aEXV[`@Q\x80\x91\x03\x90\xA1PPPPV[_\x80a\n7a#gV[\x90P\x80`\x01\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\n\x9AW\x82`@Q\x7F\xDA2\xD0\x0F\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\x81R`\x04\x01a\n\x91\x91\x90aBdV[`@Q\x80\x91\x03\x90\xFD[\x80`\r\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0B\x0F\x91\x90aD\xCBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0B*W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0BN\x91\x90aE\xC2V[a\x0B\x8FW3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x0B\x86\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[_a\x0B\x98a#gV[\x90P_\x81`\x06\x01_\x88\x81R` \x01\x90\x81R` \x01_ T\x90P_a\x0B\xBE\x82\x89\x89\x89a#\xEFV[\x90P_a\x0B\xCC\x82\x87\x87a%\xC6V[\x90P\x83_\x01_\x8A\x81R` \x01\x90\x81R` \x01_ _\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x0ClW\x88\x81`@Q\x7F\x98\xFB\x95}\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\x81R`\x04\x01a\x0Cc\x92\x91\x90aE\xEDV[`@Q\x80\x91\x03\x90\xFD[`\x01\x84_\x01_\x8B\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_\x84`\x02\x01_\x8B\x81R` \x01\x90\x81R` \x01_ _\x84\x81R` \x01\x90\x81R` \x01_ \x90P\x803\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP_\x81\x80T\x90P\x90P\x85`\x01\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\r\x8FWPa\r\x8E\x81a&+V[[\x15a\x0F\xFAW`\x01\x86`\x01\x01_\x8D\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_[\x8A\x8A\x90P\x81\x10\x15a\x0EEW\x86`\x07\x01_\x8D\x81R` \x01\x90\x81R` \x01_ \x8B\x8B\x83\x81\x81\x10a\r\xF2Wa\r\xF1aF\x14V[[\x90P` \x02\x81\x01\x90a\x0E\x04\x91\x90aFMV[\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x90`\x02\x02\x01_\x90\x91\x90\x91\x90\x91P\x81\x81a\x0E6\x91\x90aJ\x89V[PP\x80\x80`\x01\x01\x91PPa\r\xC1V[P\x83\x86`\x03\x01_\x8D\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x8A\x86`\x08\x01\x81\x90UP_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0E\x82Wa\x0E\x81a;qV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x0E\xB5W\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x0E\xA0W\x90P[P\x90P_[\x82\x81\x10\x15a\x0F\xBAWs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE3\xB2\xA8t\x85\x83\x81T\x81\x10a\x0F\x05Wa\x0F\x04aF\x14V[[\x90_R` _ \x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0FI\x91\x90aD\xCBV[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0FcW=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0F\x8B\x91\x90aK\xEAV[``\x01Q\x82\x82\x81Q\x81\x10a\x0F\xA2Wa\x0F\xA1aF\x14V[[` \x02` \x01\x01\x81\x90RP\x80\x80`\x01\x01\x91PPa\x0E\xBAV[P\x7F\xEB\x85\xC2m\xBC\xADF\xB8\nh\xA0\xF2L\xCE|,\x90\xF0\xA1\xFA\xDE\xD8A\x84\x13\x889\xFC\x9E\x80\xA2[\x8C\x82\x8D\x8D`@Qa\x0F\xF0\x94\x93\x92\x91\x90aN\x02V[`@Q\x80\x91\x03\x90\xA1P[PPPPPPPPPPPV[a\x10\x0Fa&\xBCV[a\x10\x18\x82a'\xA2V[a\x10\"\x82\x82a(\x95V[PPV[_a\x10/a)\xB3V[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x10\xA4\x91\x90aD\xCBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x10\xBFW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10\xE3\x91\x90aE\xC2V[a\x11$W3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x11\x1B\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[_a\x11-a#gV[\x90P_a\x119\x85a*:V[\x90P_a\x11G\x82\x86\x86a%\xC6V[\x90P\x82_\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x11\xE7W\x85\x81`@Q\x7F3\xCA\x1F\xE3\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\x81R`\x04\x01a\x11\xDE\x92\x91\x90aE\xEDV[`@Q\x80\x91\x03\x90\xFD[`\x01\x83_\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_\x83`\x02\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x84\x81R` \x01\x90\x81R` \x01_ \x90P\x803\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x83`\x01\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x13\x06WPa\x13\x05\x81\x80T\x90Pa&+V[[\x15a\x13\xA0W`\x01\x84`\x01\x01_\x89\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x82\x84`\x03\x01_\x89\x81R` \x01\x90\x81R` \x01_ \x81\x90UP_\x84`\x06\x01_\x89\x81R` \x01\x90\x81R` \x01_ T\x90P\x7Fx\xB1y\x17m\x1F\x19\xD7\xC2\x8E\x80\x82=\xEB\xA2bM\xA2\xCA.\xC6K\x17\x01\xF3c*\x87\xC9\xAE\xDC\x92\x88\x82`@Qa\x13\x96\x92\x91\x90aNGV[`@Q\x80\x91\x03\x90\xA1P[PPPPPPPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\xF6\x91\x90aD\xCBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x14\x11W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x145\x91\x90aE\xC2V[a\x14vW3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x14m\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[_a\x14\x7Fa#gV[\x90P_\x81`\n\x01_\x88\x81R` \x01\x90\x81R` \x01_ T\x90P_a\x14\xA5\x88\x83\x89\x89a*\x92V[\x90P_a\x14\xB3\x82\x87\x87a%\xC6V[\x90P\x83_\x01_\x8A\x81R` \x01\x90\x81R` \x01_ _\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x15SW\x88\x81`@Q\x7F\xFC\xF5\xA6\xE9\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\x81R`\x04\x01a\x15J\x92\x91\x90aE\xEDV[`@Q\x80\x91\x03\x90\xFD[`\x01\x84_\x01_\x8B\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_\x84`\x02\x01_\x8B\x81R` \x01\x90\x81R` \x01_ _\x84\x81R` \x01\x90\x81R` \x01_ \x90P\x803\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP_\x81\x80T\x90P\x90P\x85`\x01\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x16vWPa\x16u\x81a&+V[[\x15a\x18}W`\x01\x86`\x01\x01_\x8D\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x89\x89\x87`\x0B\x01_\x8E\x81R` \x01\x90\x81R` \x01_ \x91\x82a\x16\xC8\x92\x91\x90aIhV[P\x83\x86`\x03\x01_\x8D\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x8A\x86`\x0C\x01\x81\x90UP_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17\x05Wa\x17\x04a;qV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x178W\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x17#W\x90P[P\x90P_[\x82\x81\x10\x15a\x18=Ws\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE3\xB2\xA8t\x85\x83\x81T\x81\x10a\x17\x88Wa\x17\x87aF\x14V[[\x90_R` _ \x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\xCC\x91\x90aD\xCBV[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x17\xE6W=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x18\x0E\x91\x90aK\xEAV[``\x01Q\x82\x82\x81Q\x81\x10a\x18%Wa\x18$aF\x14V[[` \x02` \x01\x01\x81\x90RP\x80\x80`\x01\x01\x91PPa\x17=V[P\x7F\"X\xB7?\xAE\xD3?\xB2\xE2\xEAED\x03\xBE\xF9t\x92\x0C\xAFh*\xB3\xA7#HO\xCFgU;\x16\xA2\x8C\x82\x8D\x8D`@Qa\x18s\x94\x93\x92\x91\x90aN\x9AV[`@Q\x80\x91\x03\x90\xA1P[PPPPPPPPPPPV[_``\x80_\x80_``_a\x18\x9Ca+\x19V[\x90P_\x80\x1B\x81_\x01T\x14\x80\x15a\x18\xB7WP_\x80\x1B\x81`\x01\x01T\x14[a\x18\xF6W`@Q\x7F\x08\xC3y\xA0\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\x81R`\x04\x01a\x18\xED\x90aO)V[`@Q\x80\x91\x03\x90\xFD[a\x18\xFEa+@V[a\x19\x06a+\xDEV[F0_\x80\x1B_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x19%Wa\x19$a;qV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x19SW\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x7F\x0F\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\x95\x94\x93\x92\x91\x90\x97P\x97P\x97P\x97P\x97P\x97P\x97PP\x90\x91\x92\x93\x94\x95\x96V[``\x80_a\x19\x9Fa#gV[\x90P\x80`\x01\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\x1A\x02W\x83`@Q\x7F\x84\xDE\x131\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\x81R`\x04\x01a\x19\xF9\x91\x90aBdV[`@Q\x80\x91\x03\x90\xFD[_\x81`\x03\x01_\x86\x81R` \x01\x90\x81R` \x01_ T\x90P_\x82`\x02\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x83\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x1A\xB9W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x1ApW[PPPPP\x90P_\x81Q\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1A\xE0Wa\x1A\xDFa;qV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1B\x13W\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x1A\xFEW\x90P[P\x90P_[\x82\x81\x10\x15a\x1B\xF8Ws\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE3\xB2\xA8t\x85\x83\x81Q\x81\x10a\x1BcWa\x1BbaF\x14V[[` \x02` \x01\x01Q`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1B\x87\x91\x90aD\xCBV[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1B\xA1W=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1B\xC9\x91\x90aK\xEAV[``\x01Q\x82\x82\x81Q\x81\x10a\x1B\xE0Wa\x1B\xDFaF\x14V[[` \x02` \x01\x01\x81\x90RP\x80\x80`\x01\x01\x91PPa\x1B\x18V[P\x80\x85`\x07\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x80\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01_\x90[\x82\x82\x10\x15a\x1D&W\x83\x82\x90_R` _ \x90`\x02\x02\x01`@Q\x80`@\x01`@R\x90\x81_\x82\x01_\x90T\x90a\x01\0\n\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x1CqWa\x1Cpa9\x0FV[[`\x01\x81\x11\x15a\x1C\x83Wa\x1C\x82a9\x0FV[[\x81R` \x01`\x01\x82\x01\x80Ta\x1C\x97\x90aG\x9BV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x1C\xC3\x90aG\x9BV[\x80\x15a\x1D\x0EW\x80`\x1F\x10a\x1C\xE5Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x1D\x0EV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x1C\xF1W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x81R` \x01\x90`\x01\x01\x90a\x1C-V[PPPP\x90P\x96P\x96PPPPPP\x91P\x91V[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[_\x80a\x1D}a#gV[\x90P\x80`\x0C\x01T\x91PP\x90V[``\x80_a\x1D\x96a#gV[\x90P\x80`\x01\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\x1D\xF9W\x83`@Q\x7F\xDA2\xD0\x0F\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\x81R`\x04\x01a\x1D\xF0\x91\x90aBdV[`@Q\x80\x91\x03\x90\xFD[_\x81`\x03\x01_\x86\x81R` \x01\x90\x81R` \x01_ T\x90P_\x82`\x02\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x83\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x1E\xB0W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x1EgW[PPPPP\x90P_\x81Q\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1E\xD7Wa\x1E\xD6a;qV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1F\nW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x1E\xF5W\x90P[P\x90P_[\x82\x81\x10\x15a\x1F\xEFWs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE3\xB2\xA8t\x85\x83\x81Q\x81\x10a\x1FZWa\x1FYaF\x14V[[` \x02` \x01\x01Q`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F~\x91\x90aD\xCBV[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1F\x98W=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1F\xC0\x91\x90aK\xEAV[``\x01Q\x82\x82\x81Q\x81\x10a\x1F\xD7Wa\x1F\xD6aF\x14V[[` \x02` \x01\x01\x81\x90RP\x80\x80`\x01\x01\x91PPa\x1F\x0FV[P\x80\x85`\x0B\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x80\x80Ta \x10\x90aG\x9BV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta <\x90aG\x9BV[\x80\x15a \x87W\x80`\x1F\x10a ^Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a \x87V[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a jW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x96P\x96PPPPPP\x91P\x91V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a \xF9W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a!\x1D\x91\x90aD\xA0V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a!\x8CW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a!\x83\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[_a!\x95a#gV[\x90P\x80`\x04\x01_\x81T\x80\x92\x91\x90a!\xAB\x90aE\x11V[\x91\x90PUP_\x81`\x04\x01T\x90P\x81`\x05\x01_\x81T\x80\x92\x91\x90a!\xCC\x90aE\x11V[\x91\x90PUP_\x82`\x05\x01T\x90P\x80\x83`\x06\x01_\x84\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x81\x83`\x06\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP_\x84\x84`\r\x01_\x85\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83`\x01\x81\x11\x15a\"?Wa\">a9\x0FV[[\x02\x17\x90UP\x7F\x02\x02@\x07\xD9et\xDB\xC9\xD1\x13(\xBF\xEE\x98\x93\xE7\xC7\xBBN\xF4\xAA\x80m\xF3;\xFD\xF4T\xEB^`\x83\x82\x87`@Qa\"w\x93\x92\x91\x90aEXV[`@Q\x80\x91\x03\x90\xA1PPPPPV[_\x80a\"\x90a#gV[\x90P\x80`\x08\x01T\x91PP\x90V[``_`\x01a\"\xAB\x84a,|V[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\"\xC9Wa\"\xC8a;qV[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\"\xFBW\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a#\\W\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a#QWa#PaOGV[[\x04\x94P_\x85\x03a#\x08W[\x81\x93PPPP\x91\x90PV[_\x7F\x0B\x8F\xDB\x1F\ncV\xDD \xA6\xCB\xC6\xF9f\x8F\xAC#\xB8_\x96W]\x10\xE33\xE6\x03\xFA\xA7\x94\xAC\0\x90P\x90V[_a#\x97a#\xB2V[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[a#\xE1a-\xCDV[a#\xEB\x82\x82a.\rV[PPV[_\x80\x83\x83\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a$\x0EWa$\ra;qV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a$=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a&\xAE\x91\x90aQGV[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a'iWP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a'Pa/qV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a'\xA0W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a'\xFFW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a(#\x91\x90aD\xA0V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a(\x92W3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a(\x89\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a(\xFDWP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a(\xFA\x91\x90aQ\x9CV[`\x01[a)>W\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a)5\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a)\xA4W\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a)\x9B\x91\x90a=\x07V[`@Q\x80\x91\x03\x90\xFD[a)\xAE\x83\x83a/\xC4V[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a*8W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_a*\x8B`@Q\x80``\x01`@R\x80`,\x81R` \x01aTQ`,\x919\x80Q\x90` \x01 \x83`@Q` \x01a*p\x92\x91\x90aQ\xC7V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a.^V[\x90P\x91\x90PV[_a+\x0F`@Q\x80`\x80\x01`@R\x80`F\x81R` \x01aT\x0B`F\x919\x80Q\x90` \x01 \x86\x86\x86\x86`@Q` \x01a*\xCB\x92\x91\x90aO\xCDV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a*\xF4\x94\x93\x92\x91\x90aP\xF0V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a.^V[\x90P\x94\x93PPPPV[_\x7F\xA1jF\xD9Ba\xC7Q|\xC8\xFF\x89\xF6\x1C\x0C\xE95\x98\xE3\xC8I\x80\x10\x11\xDE\xE6I\xA6\xA5W\xD1\0\x90P\x90V[``_a+Ka+\x19V[\x90P\x80`\x02\x01\x80Ta+\\\x90aG\x9BV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta+\x88\x90aG\x9BV[\x80\x15a+\xD3W\x80`\x1F\x10a+\xAAWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a+\xD3V[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a+\xB6W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[``_a+\xE9a+\x19V[\x90P\x80`\x03\x01\x80Ta+\xFA\x90aG\x9BV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta,&\x90aG\x9BV[\x80\x15a,qW\x80`\x1F\x10a,HWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a,qV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a,TW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a,\xD8Wz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a,\xCEWa,\xCDaOGV[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a-\x15Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a-\x0BWa-\naOGV[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a-DWf#\x86\xF2o\xC1\0\0\x83\x81a-:Wa-9aOGV[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a-mWc\x05\xF5\xE1\0\x83\x81a-cWa-baOGV[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a-\x92Wa'\x10\x83\x81a-\x88Wa-\x87aOGV[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a-\xB5W`d\x83\x81a-\xABWa-\xAAaOGV[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a-\xC4W`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[a-\xD5a06V[a.\x0BW`@Q\x7F\xD7\xE6\xBC\xF8\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[a.\x15a-\xCDV[_a.\x1Ea+\x19V[\x90P\x82\x81`\x02\x01\x90\x81a.1\x91\x90aRFV[P\x81\x81`\x03\x01\x90\x81a.C\x91\x90aRFV[P_\x80\x1B\x81_\x01\x81\x90UP_\x80\x1B\x81`\x01\x01\x81\x90UPPPPV[_a.pa.ja0TV[\x83a0bV[\x90P\x91\x90PV[_\x80_\x80a.\x85\x86\x86a0\xA2V[\x92P\x92P\x92Pa.\x95\x82\x82a0\xF7V[\x82\x93PPPP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c =\x01\x14\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a.\xEE\x91\x90aD\xCBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a/\tW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a/-\x91\x90aE\xC2V[a/nW\x80`@Q\x7F*|n\xF6\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\x81R`\x04\x01a/e\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[PV[_a/\x9D\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba2YV[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a/\xCD\x82a2bV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a0)Wa0#\x82\x82a3+V[Pa02V[a01a3\xABV[[PPV[_a0?a#\xB2V[_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x90P\x90V[_a0]a3\xE7V[\x90P\x90V[_`@Q\x7F\x19\x01\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\x81R\x83`\x02\x82\x01R\x82`\"\x82\x01R`B\x81 \x91PP\x92\x91PPV[_\x80_`A\x84Q\x03a0\xE2W_\x80_` \x87\x01Q\x92P`@\x87\x01Q\x91P``\x87\x01Q_\x1A\x90Pa0\xD4\x88\x82\x85\x85a4JV[\x95P\x95P\x95PPPPa0\xF0V[_`\x02\x85Q_\x1B\x92P\x92P\x92P[\x92P\x92P\x92V[_`\x03\x81\x11\x15a1\nWa1\ta9\x0FV[[\x82`\x03\x81\x11\x15a1\x1DWa1\x1Ca9\x0FV[[\x03\x15a2UW`\x01`\x03\x81\x11\x15a17Wa16a9\x0FV[[\x82`\x03\x81\x11\x15a1JWa1Ia9\x0FV[[\x03a1\x81W`@Q\x7F\xF6E\xEE\xDF\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02`\x03\x81\x11\x15a1\x95Wa1\x94a9\x0FV[[\x82`\x03\x81\x11\x15a1\xA8Wa1\xA7a9\x0FV[[\x03a1\xECW\x80_\x1C`@Q\x7F\xFC\xE6\x98\xF7\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\x81R`\x04\x01a1\xE3\x91\x90aBdV[`@Q\x80\x91\x03\x90\xFD[`\x03\x80\x81\x11\x15a1\xFFWa1\xFEa9\x0FV[[\x82`\x03\x81\x11\x15a2\x12Wa2\x11a9\x0FV[[\x03a2TW\x80`@Q\x7F\xD7\x8B\xCE\x0C\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\x81R`\x04\x01a2K\x91\x90a=\x07V[`@Q\x80\x91\x03\x90\xFD[[PPV[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a2\xBDW\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a2\xB4\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[\x80a2\xE9\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba2YV[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa3T\x91\x90aSEV[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a3\x8CW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a3\x91V[``\x91P[P\x91P\x91Pa3\xA1\x85\x83\x83a51V[\x92PPP\x92\x91PPV[_4\x11\x15a3\xE5W`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0Fa4\x11a5\xBEV[a4\x19a64V[F0`@Q` \x01a4/\x95\x94\x93\x92\x91\x90aS[V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x90V[_\x80_\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF]WnsW\xA4P\x1D\xDF\xE9/Fh\x1B \xA0\x84_\x1C\x11\x15a4\x86W_`\x03\x85\x92P\x92P\x92Pa5'V[_`\x01\x88\x88\x88\x88`@Q_\x81R` \x01`@R`@Qa4\xA9\x94\x93\x92\x91\x90aS\xC7V[` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a4\xC9W=_\x80>=_\xFD[PPP` `@Q\x03Q\x90P_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x03a5\x1AW_`\x01_\x80\x1B\x93P\x93P\x93PPa5'V[\x80_\x80_\x1B\x93P\x93P\x93PP[\x94P\x94P\x94\x91PPV[``\x82a5FWa5A\x82a6\xABV[a5\xB6V[_\x82Q\x14\x80\x15a5lWP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a5\xAEW\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a5\xA5\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa5\xB7V[[\x93\x92PPPV[_\x80a5\xC8a+\x19V[\x90P_a5\xD3a+@V[\x90P_\x81Q\x11\x15a5\xEFW\x80\x80Q\x90` \x01 \x92PPPa61V[_\x82_\x01T\x90P_\x80\x1B\x81\x14a6\nW\x80\x93PPPPa61V[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x80a6>a+\x19V[\x90P_a6Ia+\xDEV[\x90P_\x81Q\x11\x15a6eW\x80\x80Q\x90` \x01 \x92PPPa6\xA8V[_\x82`\x01\x01T\x90P_\x80\x1B\x81\x14a6\x81W\x80\x93PPPPa6\xA8V[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x81Q\x11\x15a6\xBDW\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15a7&W\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa7\x0BV[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a7K\x82a6\xEFV[a7U\x81\x85a6\xF9V[\x93Pa7e\x81\x85` \x86\x01a7\tV[a7n\x81a71V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra7\x91\x81\x84a7AV[\x90P\x92\x91PPV[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[a7\xBC\x81a7\xAAV[\x81\x14a7\xC6W_\x80\xFD[PV[_\x815\x90Pa7\xD7\x81a7\xB3V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a7\xF2Wa7\xF1a7\xA2V[[_a7\xFF\x84\x82\x85\x01a7\xC9V[\x91PP\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a8Z\x82a81V[\x90P\x91\x90PV[a8j\x81a8PV[\x82RPPV[_a8{\x83\x83a8aV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a8\x9D\x82a8\x08V[a8\xA7\x81\x85a8\x12V[\x93Pa8\xB2\x83a8\"V[\x80_[\x83\x81\x10\x15a8\xE2W\x81Qa8\xC9\x88\x82a8pV[\x97Pa8\xD4\x83a8\x87V[\x92PP`\x01\x81\x01\x90Pa8\xB5V[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra9\x07\x81\x84a8\x93V[\x90P\x92\x91PPV[\x7FNH{q\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_R`!`\x04R`$_\xFD[`\x02\x81\x10a9MWa9La9\x0FV[[PV[_\x81\x90Pa9]\x82a9B\x81a>\x0EV[\x82RPPV[a>Q\x81a7\xAAV[\x82RPPV[a>`\x81a8PV[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a>\x98\x81a7\xAAV[\x82RPPV[_a>\xA9\x83\x83a>\x8FV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a>\xCB\x82a>fV[a>\xD5\x81\x85a>pV[\x93Pa>\xE0\x83a>\x80V[\x80_[\x83\x81\x10\x15a?\x10W\x81Qa>\xF7\x88\x82a>\x9EV[\x97Pa?\x02\x83a>\xB5V[\x92PP`\x01\x81\x01\x90Pa>\xE3V[P\x85\x93PPPP\x92\x91PPV[_`\xE0\x82\x01\x90Pa?0_\x83\x01\x8Aa>9V[\x81\x81\x03` \x83\x01Ra?B\x81\x89a7AV[\x90P\x81\x81\x03`@\x83\x01Ra?V\x81\x88a7AV[\x90Pa?e``\x83\x01\x87a>HV[a?r`\x80\x83\x01\x86a>WV[a?\x7F`\xA0\x83\x01\x85a<\xF8V[\x81\x81\x03`\xC0\x83\x01Ra?\x91\x81\x84a>\xC1V[\x90P\x98\x97PPPPPPPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_a?\xE2\x82a6\xEFV[a?\xEC\x81\x85a?\xC8V[\x93Pa?\xFC\x81\x85` \x86\x01a7\tV[a@\x05\x81a71V[\x84\x01\x91PP\x92\x91PPV[_a@\x1B\x83\x83a?\xD8V[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a@9\x82a?\x9FV[a@C\x81\x85a?\xA9V[\x93P\x83` \x82\x02\x85\x01a@U\x85a?\xB9V[\x80_[\x85\x81\x10\x15a@\x90W\x84\x84\x03\x89R\x81Qa@q\x85\x82a@\x10V[\x94Pa@|\x83a@#V[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90Pa@XV[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[`\x02\x81\x10a@\xDCWa@\xDBa9\x0FV[[PV[_\x81\x90Pa@\xEC\x82a@\xCBV[\x91\x90PV[_a@\xFB\x82a@\xDFV[\x90P\x91\x90PV[aA\x0B\x81a@\xF1V[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_aA5\x82aA\x11V[aA?\x81\x85aA\x1BV[\x93PaAO\x81\x85` \x86\x01a7\tV[aAX\x81a71V[\x84\x01\x91PP\x92\x91PPV[_`@\x83\x01_\x83\x01QaAx_\x86\x01\x82aA\x02V[P` \x83\x01Q\x84\x82\x03` \x86\x01RaA\x90\x82\x82aA+V[\x91PP\x80\x91PP\x92\x91PPV[_aA\xA8\x83\x83aAcV[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aA\xC6\x82a@\xA2V[aA\xD0\x81\x85a@\xACV[\x93P\x83` \x82\x02\x85\x01aA\xE2\x85a@\xBCV[\x80_[\x85\x81\x10\x15aB\x1DW\x84\x84\x03\x89R\x81QaA\xFE\x85\x82aA\x9DV[\x94PaB\t\x83aA\xB0V[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90PaA\xE5V[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_`@\x82\x01\x90P\x81\x81\x03_\x83\x01RaBG\x81\x85a@/V[\x90P\x81\x81\x03` \x83\x01RaB[\x81\x84aA\xBCV[\x90P\x93\x92PPPV[_` \x82\x01\x90PaBw_\x83\x01\x84a>HV[\x92\x91PPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_aB\x97\x82aA\x11V[aB\xA1\x81\x85aB}V[\x93PaB\xB1\x81\x85` \x86\x01a7\tV[aB\xBA\x81a71V[\x84\x01\x91PP\x92\x91PPV[_`@\x82\x01\x90P\x81\x81\x03_\x83\x01RaB\xDD\x81\x85a@/V[\x90P\x81\x81\x03` \x83\x01RaB\xF1\x81\x84aB\x8DV[\x90P\x93\x92PPPV[_` \x82\x84\x03\x12\x15aC\x0FWaC\x0Ea7\xA2V[[_aC\x1C\x84\x82\x85\x01a9\xAAV[\x91PP\x92\x91PPV[_\x81\x90P\x92\x91PPV[_aC9\x82a6\xEFV[aCC\x81\x85aC%V[\x93PaCS\x81\x85` \x86\x01a7\tV[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_aC\x93`\x02\x83aC%V[\x91PaC\x9E\x82aC_V[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_aC\xDD`\x01\x83aC%V[\x91PaC\xE8\x82aC\xA9V[`\x01\x82\x01\x90P\x91\x90PV[_aC\xFE\x82\x87aC/V[\x91PaD\t\x82aC\x87V[\x91PaD\x15\x82\x86aC/V[\x91PaD \x82aC\xD1V[\x91PaD,\x82\x85aC/V[\x91PaD7\x82aC\xD1V[\x91PaDC\x82\x84aC/V[\x91P\x81\x90P\x95\x94PPPPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[aDm\x81aDQV[\x82RPPV[_` \x82\x01\x90PaD\x86_\x83\x01\x84aDdV[\x92\x91PPV[_\x81Q\x90PaD\x9A\x81a;CV[\x92\x91PPV[_` \x82\x84\x03\x12\x15aD\xB5WaD\xB4a7\xA2V[[_aD\xC2\x84\x82\x85\x01aD\x8CV[\x91PP\x92\x91PPV[_` \x82\x01\x90PaD\xDE_\x83\x01\x84a>WV[\x92\x91PPV[\x7FNH{q\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_R`\x11`\x04R`$_\xFD[_aE\x1B\x82a7\xAAV[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03aEMWaELaD\xE4V[[`\x01\x82\x01\x90P\x91\x90PV[_``\x82\x01\x90PaEk_\x83\x01\x86a>HV[aEx` \x83\x01\x85a>HV[aE\x85`@\x83\x01\x84a9sV[\x94\x93PPPPV[_\x81\x15\x15\x90P\x91\x90PV[aE\xA1\x81aE\x8DV[\x81\x14aE\xABW_\x80\xFD[PV[_\x81Q\x90PaE\xBC\x81aE\x98V[\x92\x91PPV[_` \x82\x84\x03\x12\x15aE\xD7WaE\xD6a7\xA2V[[_aE\xE4\x84\x82\x85\x01aE\xAEV[\x91PP\x92\x91PPV[_`@\x82\x01\x90PaF\0_\x83\x01\x85a>HV[aF\r` \x83\x01\x84a>WV[\x93\x92PPPV[\x7FNH{q\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_R`2`\x04R`$_\xFD[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x825`\x01`@\x03\x836\x03\x03\x81\x12aFhWaFgaFAV[[\x80\x83\x01\x91PP\x92\x91PPV[`\x02\x81\x10aF\x80W_\x80\xFD[PV[_\x815aF\x8F\x81aFtV[\x80\x91PP\x91\x90PV[_\x81_\x1B\x90P\x91\x90PV[_`\xFFaF\xAF\x84aF\x98V[\x93P\x80\x19\x83\x16\x92P\x80\x84\x16\x83\x17\x91PP\x92\x91PPV[_aF\xCF\x82a@\xDFV[\x90P\x91\x90PV[_\x81\x90P\x91\x90PV[aF\xE8\x82aF\xC5V[aF\xFBaF\xF4\x82aF\xD6V[\x83TaF\xA3V[\x82UPPPV[_\x80\x835`\x01` \x03\x846\x03\x03\x81\x12aG\x1EWaG\x1DaFAV[[\x80\x84\x01\x92P\x825\x91Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aG@WaG?aFEV[[` \x83\x01\x92P`\x01\x82\x026\x03\x83\x13\x15aG\\WaG[aFIV[[P\x92P\x92\x90PV[_\x82\x90P\x92\x91PPV[\x7FNH{q\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_R`\"`\x04R`$_\xFD[_`\x02\x82\x04\x90P`\x01\x82\x16\x80aG\xB2W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03aG\xC5WaG\xC4aGnV[[P\x91\x90PV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_` `\x1F\x83\x01\x04\x90P\x91\x90PV[_\x82\x82\x1B\x90P\x92\x91PPV[_`\x08\x83\x02aH'\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82aG\xECV[aH1\x86\x83aG\xECV[\x95P\x80\x19\x84\x16\x93P\x80\x86\x16\x84\x17\x92PPP\x93\x92PPPV[_\x81\x90P\x91\x90PV[_aHlaHgaHb\x84a7\xAAV[aHIV[a7\xAAV[\x90P\x91\x90PV[_\x81\x90P\x91\x90PV[aH\x85\x83aHRV[aH\x99aH\x91\x82aHsV[\x84\x84TaG\xF8V[\x82UPPPPV[_\x90V[aH\xADaH\xA1V[aH\xB8\x81\x84\x84aH|V[PPPV[[\x81\x81\x10\x15aH\xDBWaH\xD0_\x82aH\xA5V[`\x01\x81\x01\x90PaH\xBEV[PPV[`\x1F\x82\x11\x15aI WaH\xF1\x81aG\xCBV[aH\xFA\x84aG\xDDV[\x81\x01` \x85\x10\x15aI\tW\x81\x90P[aI\x1DaI\x15\x85aG\xDDV[\x83\x01\x82aH\xBDV[PP[PPPV[_\x82\x82\x1C\x90P\x92\x91PPV[_aI@_\x19\x84`\x08\x02aI%V[\x19\x80\x83\x16\x91PP\x92\x91PPV[_aIX\x83\x83aI1V[\x91P\x82`\x02\x02\x82\x17\x90P\x92\x91PPV[aIr\x83\x83aGdV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aI\x8BWaI\x8Aa;qV[[aI\x95\x82TaG\x9BV[aI\xA0\x82\x82\x85aH\xDFV[_`\x1F\x83\x11`\x01\x81\x14aI\xCDW_\x84\x15aI\xBBW\x82\x87\x015\x90P[aI\xC5\x85\x82aIMV[\x86UPaJ,V[`\x1F\x19\x84\x16aI\xDB\x86aG\xCBV[_[\x82\x81\x10\x15aJ\x02W\x84\x89\x015\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90PaI\xDDV[\x86\x83\x10\x15aJ\x1FW\x84\x89\x015aJ\x1B`\x1F\x89\x16\x82aI1V[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPPV[aJ@\x83\x83\x83aIhV[PPPV[_\x81\x01_\x83\x01\x80aJU\x81aF\x83V[\x90PaJa\x81\x84aF\xDFV[PPP`\x01\x81\x01` \x83\x01aJv\x81\x85aG\x02V[aJ\x81\x81\x83\x86aJ5V[PPPPPPV[aJ\x93\x82\x82aJEV[PPV[_\x80\xFD[_\x80\xFD[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aJ\xB9WaJ\xB8a;qV[[aJ\xC2\x82a71V[\x90P` \x81\x01\x90P\x91\x90PV[_aJ\xE1aJ\xDC\x84aJ\x9FV[a;\xCFV[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15aJ\xFDWaJ\xFCa;mV[[aK\x08\x84\x82\x85a7\tV[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12aK$WaK#a9\xFCV[[\x81QaK4\x84\x82` \x86\x01aJ\xCFV[\x91PP\x92\x91PPV[_`\x80\x82\x84\x03\x12\x15aKRWaKQaJ\x97V[[aK\\`\x80a;\xCFV[\x90P_aKk\x84\x82\x85\x01aD\x8CV[_\x83\x01RP` aK~\x84\x82\x85\x01aD\x8CV[` \x83\x01RP`@\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aK\xA2WaK\xA1aJ\x9BV[[aK\xAE\x84\x82\x85\x01aK\x10V[`@\x83\x01RP``\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aK\xD2WaK\xD1aJ\x9BV[[aK\xDE\x84\x82\x85\x01aK\x10V[``\x83\x01RP\x92\x91PPV[_` \x82\x84\x03\x12\x15aK\xFFWaK\xFEa7\xA2V[[_\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aL\x1CWaL\x1Ba7\xA6V[[aL(\x84\x82\x85\x01aK=V[\x91PP\x92\x91PPV[_\x81\x90P\x91\x90PV[_\x815\x90PaLH\x81aFtV[\x92\x91PPV[_aL\\` \x84\x01\x84aL:V[\x90P\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x835`\x01` \x03\x846\x03\x03\x81\x12aL\x8CWaL\x8BaLlV[[\x83\x81\x01\x92P\x825\x91P` \x83\x01\x92Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aL\xB4WaL\xB3aLdV[[`\x01\x82\x026\x03\x83\x13\x15aL\xCAWaL\xC9aLhV[[P\x92P\x92\x90PV[_aL\xDD\x83\x85aA\x1BV[\x93PaL\xEA\x83\x85\x84a<\x19V[aL\xF3\x83a71V[\x84\x01\x90P\x93\x92PPPV[_`@\x83\x01aM\x0F_\x84\x01\x84aLNV[aM\x1B_\x86\x01\x82aA\x02V[PaM)` \x84\x01\x84aLpV[\x85\x83\x03` \x87\x01RaM<\x83\x82\x84aL\xD2V[\x92PPP\x80\x91PP\x92\x91PPV[_aMU\x83\x83aL\xFEV[\x90P\x92\x91PPV[_\x825`\x01`@\x03\x836\x03\x03\x81\x12aMxWaMwaLlV[[\x82\x81\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aM\x9B\x83\x85a@\xACV[\x93P\x83` \x84\x02\x85\x01aM\xAD\x84aL1V[\x80_[\x87\x81\x10\x15aM\xF0W\x84\x84\x03\x89RaM\xC7\x82\x84aM]V[aM\xD1\x85\x82aMJV[\x94PaM\xDC\x83aM\x84V[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90PaM\xB0V[P\x82\x97P\x87\x94PPPPP\x93\x92PPPV[_``\x82\x01\x90PaN\x15_\x83\x01\x87a>HV[\x81\x81\x03` \x83\x01RaN'\x81\x86a@/V[\x90P\x81\x81\x03`@\x83\x01RaN<\x81\x84\x86aM\x90V[\x90P\x95\x94PPPPPV[_`@\x82\x01\x90PaNZ_\x83\x01\x85a>HV[aNg` \x83\x01\x84a>HV[\x93\x92PPPV[_aNy\x83\x85aB}V[\x93PaN\x86\x83\x85\x84a<\x19V[aN\x8F\x83a71V[\x84\x01\x90P\x93\x92PPPV[_``\x82\x01\x90PaN\xAD_\x83\x01\x87a>HV[\x81\x81\x03` \x83\x01RaN\xBF\x81\x86a@/V[\x90P\x81\x81\x03`@\x83\x01RaN\xD4\x81\x84\x86aNnV[\x90P\x95\x94PPPPPV[\x7FEIP712: Uninitialized\0\0\0\0\0\0\0\0\0\0\0_\x82\x01RPV[_aO\x13`\x15\x83a6\xF9V[\x91PaO\x1E\x82aN\xDFV[` \x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01RaO@\x81aO\x07V[\x90P\x91\x90PV[\x7FNH{q\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_R`\x12`\x04R`$_\xFD[_` \x82\x84\x03\x12\x15aO\x89WaO\x88a7\xA2V[[_aO\x96\x84\x82\x85\x01aL:V[\x91PP\x92\x91PPV[_\x81\x90P\x92\x91PPV[_aO\xB4\x83\x85aO\x9FV[\x93PaO\xC1\x83\x85\x84a<\x19V[\x82\x84\x01\x90P\x93\x92PPPV[_aO\xD9\x82\x84\x86aO\xA9V[\x91P\x81\x90P\x93\x92PPPV[aO\xEE\x81a@\xF1V[\x82RPPV[_``\x82\x01\x90PaP\x07_\x83\x01\x86a<\xF8V[aP\x14` \x83\x01\x85aO\xE5V[aP!`@\x83\x01\x84a<\xF8V[\x94\x93PPPPV[_\x81Q\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[aPU\x81a<\xEFV[\x82RPPV[_aPf\x83\x83aPLV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aP\x88\x82aP)V[aP\x92\x81\x85aP3V[\x93PaP\x9D\x83aP=V[\x80_[\x83\x81\x10\x15aP\xCDW\x81QaP\xB4\x88\x82aP[V[\x97PaP\xBF\x83aPrV[\x92PP`\x01\x81\x01\x90PaP\xA0V[P\x85\x93PPPP\x92\x91PPV[_aP\xE5\x82\x84aP~V[\x91P\x81\x90P\x92\x91PPV[_`\x80\x82\x01\x90PaQ\x03_\x83\x01\x87a<\xF8V[aQ\x10` \x83\x01\x86a>HV[aQ\x1D`@\x83\x01\x85a>HV[aQ*``\x83\x01\x84a<\xF8V[\x95\x94PPPPPV[_\x81Q\x90PaQA\x81a7\xB3V[\x92\x91PPV[_` \x82\x84\x03\x12\x15aQ\\WaQ[a7\xA2V[[_aQi\x84\x82\x85\x01aQ3V[\x91PP\x92\x91PPV[aQ{\x81a<\xEFV[\x81\x14aQ\x85W_\x80\xFD[PV[_\x81Q\x90PaQ\x96\x81aQrV[\x92\x91PPV[_` \x82\x84\x03\x12\x15aQ\xB1WaQ\xB0a7\xA2V[[_aQ\xBE\x84\x82\x85\x01aQ\x88V[\x91PP\x92\x91PPV[_`@\x82\x01\x90PaQ\xDA_\x83\x01\x85a<\xF8V[aQ\xE7` \x83\x01\x84a>HV[\x93\x92PPPV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[`\x1F\x82\x11\x15aRAWaR\x12\x81aQ\xEEV[aR\x1B\x84aG\xDDV[\x81\x01` \x85\x10\x15aR*W\x81\x90P[aR>aR6\x85aG\xDDV[\x83\x01\x82aH\xBDV[PP[PPPV[aRO\x82a6\xEFV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aRhWaRga;qV[[aRr\x82TaG\x9BV[aR}\x82\x82\x85aR\0V[_` \x90P`\x1F\x83\x11`\x01\x81\x14aR\xAEW_\x84\x15aR\x9CW\x82\x87\x01Q\x90P[aR\xA6\x85\x82aIMV[\x86UPaS\rV[`\x1F\x19\x84\x16aR\xBC\x86aQ\xEEV[_[\x82\x81\x10\x15aR\xE3W\x84\x89\x01Q\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90PaR\xBEV[\x86\x83\x10\x15aS\0W\x84\x89\x01QaR\xFC`\x1F\x89\x16\x82aI1V[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPV[_aS\x1F\x82aA\x11V[aS)\x81\x85aO\x9FV[\x93PaS9\x81\x85` \x86\x01a7\tV[\x80\x84\x01\x91PP\x92\x91PPV[_aSP\x82\x84aS\x15V[\x91P\x81\x90P\x92\x91PPV[_`\xA0\x82\x01\x90PaSn_\x83\x01\x88a<\xF8V[aS{` \x83\x01\x87a<\xF8V[aS\x88`@\x83\x01\x86a<\xF8V[aS\x95``\x83\x01\x85a>HV[aS\xA2`\x80\x83\x01\x84a>WV[\x96\x95PPPPPPV[_`\xFF\x82\x16\x90P\x91\x90PV[aS\xC1\x81aS\xACV[\x82RPPV[_`\x80\x82\x01\x90PaS\xDA_\x83\x01\x87a<\xF8V[aS\xE7` \x83\x01\x86aS\xB8V[aS\xF4`@\x83\x01\x85a<\xF8V[aT\x01``\x83\x01\x84a<\xF8V[\x95\x94PPPPPV\xFECrsgenVerification(uint256 crsId,uint256 maxBitLength,bytes crsDigest)PrepKeygenVerification(uint256 prepKeygenId)KeygenVerification(uint256 prepKeygenId,uint256 keyId,KeyDigest[] keyDigests)KeyDigest(uint8 keyType,bytes digest)KeyDigest(uint8 keyType,bytes digest)", ); /// The runtime bytecode of the contract, as deployed on the network. /// /// ```text - ///0x608060405260043610610108575f3560e01c8063589adb0e11610094578063ad3cb1cc11610063578063ad3cb1cc14610353578063baff211e1461037d578063c55b8724146103a7578063caa367db146103e4578063d52f10eb1461040c57610108565b8063589adb0e1461029657806362978787146102be57806384b0196e146102e6578063936608ae1461031657610108565b80633c02f834116100db5780633c02f834146101c457806345af261b146101ec5780634610ffe8146102285780634f1ef2861461025057806352d1902d1461026c57610108565b80630d8e6e2c1461010c57806316c713d91461013657806319f4f6321461017257806339f73810146101ae575b5f80fd5b348015610117575f80fd5b50610120610436565b60405161012d919061343e565b60405180910390f35b348015610141575f80fd5b5061015c600480360381019061015791906134a2565b6104b1565b60405161016991906135b4565b60405180910390f35b34801561017d575f80fd5b50610198600480360381019061019391906134a2565b610582565b6040516101a59190613647565b60405180910390f35b3480156101b9575f80fd5b506101c261062f565b005b3480156101cf575f80fd5b506101ea60048036038101906101e59190613683565b61087e565b005b3480156101f7575f80fd5b50610212600480360381019061020d91906134a2565b610a2d565b60405161021f9190613647565b60405180910390f35b348015610233575f80fd5b5061024e60048036038101906102499190613777565b610ac2565b005b61026a6004803603810190610265919061395a565b610e33565b005b348015610277575f80fd5b50610280610e52565b60405161028d91906139cc565b60405180910390f35b3480156102a1575f80fd5b506102bc60048036038101906102b791906139e5565b610e83565b005b3480156102c9575f80fd5b506102e460048036038101906102df9190613a42565b6111d5565b005b3480156102f1575f80fd5b506102fa6114e2565b60405161030d9796959493929190613be2565b60405180910390f35b348015610321575f80fd5b5061033c600480360381019061033791906134a2565b6115eb565b60405161034a929190613ef4565b60405180910390f35b34801561035e575f80fd5b5061036761189e565b604051610374919061343e565b60405180910390f35b348015610388575f80fd5b506103916118d7565b60405161039e9190613f29565b60405180910390f35b3480156103b2575f80fd5b506103cd60048036038101906103c891906134a2565b6118ee565b6040516103db929190613f8a565b60405180910390f35b3480156103ef575f80fd5b5061040a60048036038101906104059190613fbf565b611b0c565b005b348015610417575f80fd5b50610420611cf6565b60405161042d9190613f29565b60405180910390f35b60606040518060400160405280600d81526020017f4b4d5347656e65726174696f6e000000000000000000000000000000000000008152506104775f611d0d565b6104816001611d0d565b61048a5f611d0d565b60405160200161049d94939291906140b8565b604051602081830303815290604052905090565b60605f6104bc611dd7565b90505f816004015f8581526020019081526020015f20549050816002015f8581526020019081526020015f205f8281526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561057457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161052b575b505050505092505050919050565b5f8061058c611dd7565b9050806001015f8481526020019081526020015f205f9054906101000a900460ff166105ef57826040517f84de13310000000000000000000000000000000000000000000000000000000081526004016105e69190613f29565b60405180910390fd5b5f816007015f8581526020019081526020015f2054905081600e015f8281526020019081526020015f205f9054906101000a900460ff1692505050919050565b6001610639611dfe565b67ffffffffffffffff161461067a576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f610685611e22565b9050805f0160089054906101000a900460ff16806106cd57508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b15610704576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff0219169083151502179055506107bd6040518060400160405280600d81526020017f4b4d5347656e65726174696f6e000000000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250611e49565b5f6107c6611dd7565b905060f8600360058111156107de576107dd6135d4565b5b901b816005018190555060f8600460058111156107fe576107fd6135d4565b5b901b816006018190555060f860058081111561081d5761081c6135d4565b5b901b81600a0181905550505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2826040516108729190614138565b60405180910390a15050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ff9190614165565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461096e57336040517f0e56cf3d0000000000000000000000000000000000000000000000000000000081526004016109659190614190565b60405180910390fd5b5f610977611dd7565b905080600a015f81548092919061098d906141d6565b91905055505f81600a015490508382600b015f8381526020019081526020015f20819055508282600e015f8381526020019081526020015f205f6101000a81548160ff021916908360018111156109e7576109e66135d4565b5b02179055507f3f038f6f88cb3031b7718588403a2ec220576a868be07dde4c02b846ca352ef5818585604051610a1f9392919061421d565b60405180910390a150505050565b5f80610a37611dd7565b9050806001015f8481526020019081526020015f205f9054906101000a900460ff16610a9a57826040517fda32d00f000000000000000000000000000000000000000000000000000000008152600401610a919190613f29565b60405180910390fd5b80600e015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b8152600401610b0f9190614190565b602060405180830381865afa158015610b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4e9190614287565b610b8f57336040517faee86323000000000000000000000000000000000000000000000000000000008152600401610b869190614190565b60405180910390fd5b5f610b98611dd7565b90505f816007015f8881526020019081526020015f205490505f610bbe82898989611e5f565b90505f610bcc828787612036565b9050835f015f8a81526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610c6c5788816040517f98fb957d000000000000000000000000000000000000000000000000000000008152600401610c639291906142b2565b60405180910390fd5b6001845f015f8b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f610cdc8a8461209b565b9050846001015f8b81526020019081526020015f205f9054906101000a900460ff16158015610d115750610d1081516122f0565b5b15610e27576001856001015f8c81526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b89899050811015610dc757856008015f8c81526020019081526020015f208a8a83818110610d7457610d736142d9565b5b9050602002810190610d869190614312565b908060018154018082558091505060019003905f5260205f2090600202015f909190919091508181610db8919061474e565b50508080600101915050610d43565b5082856004015f8c81526020019081526020015f20819055508985600901819055507feb85c26dbcad46b80a68a0f24cce7c2c90f0a1faded84184138839fc9e80a25b8a828b8b604051610e1e949392919061492d565b60405180910390a15b50505050505050505050565b610e3b612381565b610e4482612467565b610e4e828261255a565b5050565b5f610e5b612678565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b8152600401610ed09190614190565b602060405180830381865afa158015610eeb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f0f9190614287565b610f5057336040517faee86323000000000000000000000000000000000000000000000000000000008152600401610f479190614190565b60405180910390fd5b5f610f59611dd7565b90505f610f65856126ff565b90505f610f73828686612036565b9050825f015f8781526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156110135785816040517f33ca1fe300000000000000000000000000000000000000000000000000000000815260040161100a9291906142b2565b60405180910390fd5b6001835f015f8881526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f836002015f8881526020019081526020015f205f8481526020019081526020015f2090508033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836001015f8881526020019081526020015f205f9054906101000a900460ff16158015611132575061113181805490506122f0565b5b156111cc576001846001015f8981526020019081526020015f205f6101000a81548160ff02191690831515021790555082846004015f8981526020019081526020015f20819055505f846007015f8981526020019081526020015f205490507f78b179176d1f19d7c28e80823deba2624da2ca2ec64b1701f3632a87c9aedc9288826040516111c2929190614972565b60405180910390a1505b50505050505050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b81526004016112229190614190565b602060405180830381865afa15801561123d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112619190614287565b6112a257336040517faee863230000000000000000000000000000000000000000000000000000000081526004016112999190614190565b60405180910390fd5b5f6112ab611dd7565b90505f81600b015f8881526020019081526020015f205490505f6112d188838989612757565b90505f6112df828787612036565b9050835f015f8a81526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561137f5788816040517ffcf5a6e90000000000000000000000000000000000000000000000000000000081526004016113769291906142b2565b60405180910390fd5b6001845f015f8b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f6113ef8a8461209b565b9050846001015f8b81526020019081526020015f205f9054906101000a900460ff16158015611424575061142381516122f0565b5b156114d6576001856001015f8c81526020019081526020015f205f6101000a81548160ff021916908315150217905550888886600c015f8d81526020019081526020015f20918261147692919061462d565b5082856004015f8c81526020019081526020015f20819055508985600d01819055507f2258b73faed33fb2e2ea454403bef974920caf682ab3a723484fcf67553b16a28a828b8b6040516114cd94939291906149c5565b60405180910390a15b50505050505050505050565b5f6060805f805f60605f6114f46127de565b90505f801b815f015414801561150f57505f801b8160010154145b61154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154590614a54565b60405180910390fd5b611556612805565b61155e6128a3565b46305f801b5f67ffffffffffffffff81111561157d5761157c613836565b5b6040519080825280602002602001820160405280156115ab5781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b6060805f6115f7611dd7565b9050806001015f8581526020019081526020015f205f9054906101000a900460ff1661165a57836040517f84de13310000000000000000000000000000000000000000000000000000000081526004016116519190613f29565b60405180910390fd5b5f816004015f8681526020019081526020015f20549050816003015f8681526020019081526020015f205f8281526020019081526020015f20826008015f8781526020019081526020015f2081805480602002602001604051908101604052809291908181526020015f905b8282101561176e578382905f5260205f200180546116e390614460565b80601f016020809104026020016040519081016040528092919081815260200182805461170f90614460565b801561175a5780601f106117315761010080835404028352916020019161175a565b820191905f5260205f20905b81548152906001019060200180831161173d57829003601f168201915b5050505050815260200190600101906116c6565b50505050915080805480602002602001604051908101604052809291908181526020015f905b8282101561188d578382905f5260205f2090600202016040518060400160405290815f82015f9054906101000a900460ff1660018111156117d8576117d76135d4565b5b60018111156117ea576117e96135d4565b5b81526020016001820180546117fe90614460565b80601f016020809104026020016040519081016040528092919081815260200182805461182a90614460565b80156118755780601f1061184c57610100808354040283529160200191611875565b820191905f5260205f20905b81548152906001019060200180831161185857829003601f168201915b50505050508152505081526020019060010190611794565b505050509050935093505050915091565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b5f806118e1611dd7565b905080600d015491505090565b6060805f6118fa611dd7565b9050806001015f8581526020019081526020015f205f9054906101000a900460ff1661195d57836040517fda32d00f0000000000000000000000000000000000000000000000000000000081526004016119549190613f29565b60405180910390fd5b5f816004015f8681526020019081526020015f20549050816003015f8681526020019081526020015f205f8281526020019081526020015f2082600c015f8781526020019081526020015f2081805480602002602001604051908101604052809291908181526020015f905b82821015611a71578382905f5260205f200180546119e690614460565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1290614460565b8015611a5d5780601f10611a3457610100808354040283529160200191611a5d565b820191905f5260205f20905b815481529060010190602001808311611a4057829003601f168201915b5050505050815260200190600101906119c9565b505050509150808054611a8390614460565b80601f0160208091040260200160405190810160405280929190818152602001828054611aaf90614460565b8015611afa5780601f10611ad157610100808354040283529160200191611afa565b820191905f5260205f20905b815481529060010190602001808311611add57829003601f168201915b50505050509050935093505050915091565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8d9190614165565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bfc57336040517f0e56cf3d000000000000000000000000000000000000000000000000000000008152600401611bf39190614190565b60405180910390fd5b5f611c05611dd7565b9050806005015f815480929190611c1b906141d6565b91905055505f81600501549050816006015f815480929190611c3c906141d6565b91905055505f8260060154905080836007015f8481526020019081526020015f208190555081836007015f8381526020019081526020015f20819055505f8484600e015f8581526020019081526020015f205f6101000a81548160ff02191690836001811115611caf57611cae6135d4565b5b02179055507f02024007d96574dbc9d11328bfee9893e7c7bb4ef4aa806df33bfdf454eb5e60838287604051611ce79392919061421d565b60405180910390a15050505050565b5f80611d00611dd7565b9050806009015491505090565b60605f6001611d1b84612941565b0190505f8167ffffffffffffffff811115611d3957611d38613836565b5b6040519080825280601f01601f191660200182016040528015611d6b5781602001600182028036833780820191505090505b5090505f82602001820190505b600115611dcc578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611dc157611dc0614a72565b5b0494505f8503611d78575b819350505050919050565b5f7f0b8fdb1f0a6356dd20a6cbc6f9668fac23b85f96575d10e333e603faa794ac00905090565b5f611e07611e22565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b611e51612a92565b611e5b8282612ad2565b5050565b5f808383905067ffffffffffffffff811115611e7e57611e7d613836565b5b604051908082528060200260200182016040528015611eac5781602001602082028036833780820191505090505b5090505f5b84849050811015611fb0576040518060600160405280602581526020016151b46025913980519060200120858583818110611eef57611eee6142d9565b5b9050602002810190611f019190614312565b5f016020810190611f129190614a9f565b868684818110611f2557611f246142d9565b5b9050602002810190611f379190614312565b8060200190611f4691906143c7565b604051611f54929190614af8565b6040518091039020604051602001611f6e93929190614b1f565b60405160208183030381529060405280519060200120828281518110611f9757611f966142d9565b5b6020026020010181815250508080600101915050611eb1565b5061202b6040518060a00160405280607281526020016151426072913980519060200120878784604051602001611fe79190614c05565b604051602081830303815290604052805190602001206040516020016120109493929190614c1b565b60405160208183030381529060405280519060200120612b23565b915050949350505050565b5f806120858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050612b3c565b905061209081612b66565b809150509392505050565b60605f6120a6611dd7565b90505f73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e3b2a874336040518263ffffffff1660e01b81526004016120f69190614190565b5f60405180830381865afa158015612110573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906121389190614db1565b6060015190505f826002015f8781526020019081526020015f205f8681526020019081526020015f2090508033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f836003015f8881526020019081526020015f205f8781526020019081526020015f2090508083908060018154018082558091505060019003905f5260205f20015f9091909190915090816122179190614e50565b5080805480602002602001604051908101604052809291908181526020015f905b828210156122e0578382905f5260205f2001805461225590614460565b80601f016020809104026020016040519081016040528092919081815260200182805461228190614460565b80156122cc5780601f106122a3576101008083540402835291602001916122cc565b820191905f5260205f20905b8154815290600101906020018083116122af57829003601f168201915b505050505081526020019060010190612238565b5050505094505050505092915050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663b4722bc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561234f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123739190614f33565b905080831015915050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061242e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612415612c36565b73ffffffffffffffffffffffffffffffffffffffff1614155b15612465576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124e89190614165565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461255757336040517f0e56cf3d00000000000000000000000000000000000000000000000000000000815260040161254e9190614190565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156125c257506040513d601f19601f820116820180604052508101906125bf9190614f88565b60015b61260357816040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016125fa9190614190565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461266957806040517faa1d49a400000000000000000000000000000000000000000000000000000000815260040161266091906139cc565b60405180910390fd5b6126738383612c89565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146126fd576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f6127506040518060600160405280602c8152602001615116602c91398051906020012083604051602001612735929190614fb3565b60405160208183030381529060405280519060200120612b23565b9050919050565b5f6127d46040518060800160405280604681526020016150d0604691398051906020012086868686604051602001612790929190614af8565b604051602081830303815290604052805190602001206040516020016127b99493929190614c1b565b60405160208183030381529060405280519060200120612b23565b9050949350505050565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f6128106127de565b905080600201805461282190614460565b80601f016020809104026020016040519081016040528092919081815260200182805461284d90614460565b80156128985780601f1061286f57610100808354040283529160200191612898565b820191905f5260205f20905b81548152906001019060200180831161287b57829003601f168201915b505050505091505090565b60605f6128ae6127de565b90508060030180546128bf90614460565b80601f01602080910402602001604051908101604052809291908181526020018280546128eb90614460565b80156129365780601f1061290d57610100808354040283529160200191612936565b820191905f5260205f20905b81548152906001019060200180831161291957829003601f168201915b505050505091505090565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061299d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161299357612992614a72565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106129da576d04ee2d6d415b85acef810000000083816129d0576129cf614a72565b5b0492506020810190505b662386f26fc100008310612a0957662386f26fc1000083816129ff576129fe614a72565b5b0492506010810190505b6305f5e1008310612a32576305f5e1008381612a2857612a27614a72565b5b0492506008810190505b6127108310612a57576127108381612a4d57612a4c614a72565b5b0492506004810190505b60648310612a7a5760648381612a7057612a6f614a72565b5b0492506002810190505b600a8310612a89576001810190505b80915050919050565b612a9a612cfb565b612ad0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b612ada612a92565b5f612ae36127de565b905082816002019081612af69190614e50565b5081816003019081612b089190614e50565b505f801b815f01819055505f801b8160010181905550505050565b5f612b35612b2f612d19565b83612d27565b9050919050565b5f805f80612b4a8686612d67565b925092509250612b5a8282612dbc565b82935050505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663203d0114826040518263ffffffff1660e01b8152600401612bb39190614190565b602060405180830381865afa158015612bce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bf29190614287565b612c3357806040517f2a7c6ef6000000000000000000000000000000000000000000000000000000008152600401612c2a9190614190565b60405180910390fd5b50565b5f612c627f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b612f1e565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612c9282612f27565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f81511115612cee57612ce88282612ff0565b50612cf7565b612cf6613070565b5b5050565b5f612d04611e22565b5f0160089054906101000a900460ff16905090565b5f612d226130ac565b905090565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f6041845103612da7575f805f602087015192506040870151915060608701515f1a9050612d998882858561310f565b955095509550505050612db5565b5f600285515f1b9250925092505b9250925092565b5f6003811115612dcf57612dce6135d4565b5b826003811115612de257612de16135d4565b5b0315612f1a5760016003811115612dfc57612dfb6135d4565b5b826003811115612e0f57612e0e6135d4565b5b03612e46576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115612e5a57612e596135d4565b5b826003811115612e6d57612e6c6135d4565b5b03612eb157805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401612ea89190613f29565b60405180910390fd5b600380811115612ec457612ec36135d4565b5b826003811115612ed757612ed66135d4565b5b03612f1957806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401612f1091906139cc565b60405180910390fd5b5b5050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b03612f8257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401612f799190614190565b60405180910390fd5b80612fae7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b612f1e565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff1684604051613019919061500a565b5f60405180830381855af49150503d805f8114613051576040519150601f19603f3d011682016040523d82523d5f602084013e613056565b606091505b50915091506130668583836131f6565b9250505092915050565b5f3411156130aa576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6130d6613283565b6130de6132f9565b46306040516020016130f4959493929190615020565b60405160208183030381529060405280519060200120905090565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c111561314b575f6003859250925092506131ec565b5f6001888888886040515f815260200160405260405161316e949392919061508c565b6020604051602081039080840390855afa15801561318e573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036131df575f60015f801b935093509350506131ec565b805f805f1b935093509350505b9450945094915050565b60608261320b5761320682613370565b61327b565b5f825114801561323157505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561327357836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161326a9190614190565b60405180910390fd5b81905061327c565b5b9392505050565b5f8061328d6127de565b90505f613298612805565b90505f815111156132b4578080519060200120925050506132f6565b5f825f015490505f801b81146132cf578093505050506132f6565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f806133036127de565b90505f61330e6128a3565b90505f8151111561332a5780805190602001209250505061336d565b5f826001015490505f801b81146133465780935050505061336d565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f815111156133825780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156133eb5780820151818401526020810190506133d0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613410826133b4565b61341a81856133be565b935061342a8185602086016133ce565b613433816133f6565b840191505092915050565b5f6020820190508181035f8301526134568184613406565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6134818161346f565b811461348b575f80fd5b50565b5f8135905061349c81613478565b92915050565b5f602082840312156134b7576134b6613467565b5b5f6134c48482850161348e565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61351f826134f6565b9050919050565b61352f81613515565b82525050565b5f6135408383613526565b60208301905092915050565b5f602082019050919050565b5f613562826134cd565b61356c81856134d7565b9350613577836134e7565b805f5b838110156135a757815161358e8882613535565b97506135998361354c565b92505060018101905061357a565b5085935050505092915050565b5f6020820190508181035f8301526135cc8184613558565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110613612576136116135d4565b5b50565b5f81905061362282613601565b919050565b5f61363182613615565b9050919050565b61364181613627565b82525050565b5f60208201905061365a5f830184613638565b92915050565b6002811061366c575f80fd5b50565b5f8135905061367d81613660565b92915050565b5f806040838503121561369957613698613467565b5b5f6136a68582860161348e565b92505060206136b78582860161366f565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126136e2576136e16136c1565b5b8235905067ffffffffffffffff8111156136ff576136fe6136c5565b5b60208301915083602082028301111561371b5761371a6136c9565b5b9250929050565b5f8083601f840112613737576137366136c1565b5b8235905067ffffffffffffffff811115613754576137536136c5565b5b6020830191508360018202830111156137705761376f6136c9565b5b9250929050565b5f805f805f606086880312156137905761378f613467565b5b5f61379d8882890161348e565b955050602086013567ffffffffffffffff8111156137be576137bd61346b565b5b6137ca888289016136cd565b9450945050604086013567ffffffffffffffff8111156137ed576137ec61346b565b5b6137f988828901613722565b92509250509295509295909350565b61381181613515565b811461381b575f80fd5b50565b5f8135905061382c81613808565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61386c826133f6565b810181811067ffffffffffffffff8211171561388b5761388a613836565b5b80604052505050565b5f61389d61345e565b90506138a98282613863565b919050565b5f67ffffffffffffffff8211156138c8576138c7613836565b5b6138d1826133f6565b9050602081019050919050565b828183375f83830152505050565b5f6138fe6138f9846138ae565b613894565b90508281526020810184848401111561391a57613919613832565b5b6139258482856138de565b509392505050565b5f82601f830112613941576139406136c1565b5b81356139518482602086016138ec565b91505092915050565b5f80604083850312156139705761396f613467565b5b5f61397d8582860161381e565b925050602083013567ffffffffffffffff81111561399e5761399d61346b565b5b6139aa8582860161392d565b9150509250929050565b5f819050919050565b6139c6816139b4565b82525050565b5f6020820190506139df5f8301846139bd565b92915050565b5f805f604084860312156139fc576139fb613467565b5b5f613a098682870161348e565b935050602084013567ffffffffffffffff811115613a2a57613a2961346b565b5b613a3686828701613722565b92509250509250925092565b5f805f805f60608688031215613a5b57613a5a613467565b5b5f613a688882890161348e565b955050602086013567ffffffffffffffff811115613a8957613a8861346b565b5b613a9588828901613722565b9450945050604086013567ffffffffffffffff811115613ab857613ab761346b565b5b613ac488828901613722565b92509250509295509295909350565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b613b0781613ad3565b82525050565b613b168161346f565b82525050565b613b2581613515565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613b5d8161346f565b82525050565b5f613b6e8383613b54565b60208301905092915050565b5f602082019050919050565b5f613b9082613b2b565b613b9a8185613b35565b9350613ba583613b45565b805f5b83811015613bd5578151613bbc8882613b63565b9750613bc783613b7a565b925050600181019050613ba8565b5085935050505092915050565b5f60e082019050613bf55f83018a613afe565b8181036020830152613c078189613406565b90508181036040830152613c1b8188613406565b9050613c2a6060830187613b0d565b613c376080830186613b1c565b613c4460a08301856139bd565b81810360c0830152613c568184613b86565b905098975050505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f613ca7826133b4565b613cb18185613c8d565b9350613cc18185602086016133ce565b613cca816133f6565b840191505092915050565b5f613ce08383613c9d565b905092915050565b5f602082019050919050565b5f613cfe82613c64565b613d088185613c6e565b935083602082028501613d1a85613c7e565b805f5b85811015613d555784840389528151613d368582613cd5565b9450613d4183613ce8565b925060208a01995050600181019050613d1d565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b60028110613da157613da06135d4565b5b50565b5f819050613db182613d90565b919050565b5f613dc082613da4565b9050919050565b613dd081613db6565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f613dfa82613dd6565b613e048185613de0565b9350613e148185602086016133ce565b613e1d816133f6565b840191505092915050565b5f604083015f830151613e3d5f860182613dc7565b5060208301518482036020860152613e558282613df0565b9150508091505092915050565b5f613e6d8383613e28565b905092915050565b5f602082019050919050565b5f613e8b82613d67565b613e958185613d71565b935083602082028501613ea785613d81565b805f5b85811015613ee25784840389528151613ec38582613e62565b9450613ece83613e75565b925060208a01995050600181019050613eaa565b50829750879550505050505092915050565b5f6040820190508181035f830152613f0c8185613cf4565b90508181036020830152613f208184613e81565b90509392505050565b5f602082019050613f3c5f830184613b0d565b92915050565b5f82825260208201905092915050565b5f613f5c82613dd6565b613f668185613f42565b9350613f768185602086016133ce565b613f7f816133f6565b840191505092915050565b5f6040820190508181035f830152613fa28185613cf4565b90508181036020830152613fb68184613f52565b90509392505050565b5f60208284031215613fd457613fd3613467565b5b5f613fe18482850161366f565b91505092915050565b5f81905092915050565b5f613ffe826133b4565b6140088185613fea565b93506140188185602086016133ce565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f614058600283613fea565b915061406382614024565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6140a2600183613fea565b91506140ad8261406e565b600182019050919050565b5f6140c38287613ff4565b91506140ce8261404c565b91506140da8286613ff4565b91506140e582614096565b91506140f18285613ff4565b91506140fc82614096565b91506141088284613ff4565b915081905095945050505050565b5f67ffffffffffffffff82169050919050565b61413281614116565b82525050565b5f60208201905061414b5f830184614129565b92915050565b5f8151905061415f81613808565b92915050565b5f6020828403121561417a57614179613467565b5b5f61418784828501614151565b91505092915050565b5f6020820190506141a35f830184613b1c565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6141e08261346f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614212576142116141a9565b5b600182019050919050565b5f6060820190506142305f830186613b0d565b61423d6020830185613b0d565b61424a6040830184613638565b949350505050565b5f8115159050919050565b61426681614252565b8114614270575f80fd5b50565b5f815190506142818161425d565b92915050565b5f6020828403121561429c5761429b613467565b5b5f6142a984828501614273565b91505092915050565b5f6040820190506142c55f830185613b0d565b6142d26020830184613b1c565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f80fd5b5f80fd5b5f80fd5b5f8235600160400383360303811261432d5761432c614306565b5b80830191505092915050565b60028110614345575f80fd5b50565b5f813561435481614339565b80915050919050565b5f815f1b9050919050565b5f60ff6143748461435d565b9350801983169250808416831791505092915050565b5f61439482613da4565b9050919050565b5f819050919050565b6143ad8261438a565b6143c06143b98261439b565b8354614368565b8255505050565b5f80833560016020038436030381126143e3576143e2614306565b5b80840192508235915067ffffffffffffffff8211156144055761440461430a565b5b6020830192506001820236038313156144215761442061430e565b5b509250929050565b5f82905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061447757607f821691505b60208210810361448a57614489614433565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026144ec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826144b1565b6144f686836144b1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61453161452c6145278461346f565b61450e565b61346f565b9050919050565b5f819050919050565b61454a83614517565b61455e61455682614538565b8484546144bd565b825550505050565b5f90565b614572614566565b61457d818484614541565b505050565b5b818110156145a0576145955f8261456a565b600181019050614583565b5050565b601f8211156145e5576145b681614490565b6145bf846144a2565b810160208510156145ce578190505b6145e26145da856144a2565b830182614582565b50505b505050565b5f82821c905092915050565b5f6146055f19846008026145ea565b1980831691505092915050565b5f61461d83836145f6565b9150826002028217905092915050565b6146378383614429565b67ffffffffffffffff8111156146505761464f613836565b5b61465a8254614460565b6146658282856145a4565b5f601f831160018114614692575f8415614680578287013590505b61468a8582614612565b8655506146f1565b601f1984166146a086614490565b5f5b828110156146c7578489013582556001820191506020850194506020810190506146a2565b868310156146e457848901356146e0601f8916826145f6565b8355505b6001600288020188555050505b50505050505050565b61470583838361462d565b505050565b5f81015f83018061471a81614348565b905061472681846143a4565b505050600181016020830161473b81856143c7565b6147468183866146fa565b505050505050565b614758828261470a565b5050565b5f819050919050565b5f8135905061477381614339565b92915050565b5f6147876020840184614765565b905092915050565b5f80fd5b5f80fd5b5f80fd5b5f80833560016020038436030381126147b7576147b6614797565b5b83810192508235915060208301925067ffffffffffffffff8211156147df576147de61478f565b5b6001820236038313156147f5576147f4614793565b5b509250929050565b5f6148088385613de0565b93506148158385846138de565b61481e836133f6565b840190509392505050565b5f6040830161483a5f840184614779565b6148465f860182613dc7565b50614854602084018461479b565b85830360208701526148678382846147fd565b925050508091505092915050565b5f6148808383614829565b905092915050565b5f823560016040038336030381126148a3576148a2614797565b5b82810191505092915050565b5f602082019050919050565b5f6148c68385613d71565b9350836020840285016148d88461475c565b805f5b8781101561491b5784840389526148f28284614888565b6148fc8582614875565b9450614907836148af565b925060208a019950506001810190506148db565b50829750879450505050509392505050565b5f6060820190506149405f830187613b0d565b81810360208301526149528186613cf4565b905081810360408301526149678184866148bb565b905095945050505050565b5f6040820190506149855f830185613b0d565b6149926020830184613b0d565b9392505050565b5f6149a48385613f42565b93506149b18385846138de565b6149ba836133f6565b840190509392505050565b5f6060820190506149d85f830187613b0d565b81810360208301526149ea8186613cf4565b905081810360408301526149ff818486614999565b905095945050505050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f614a3e6015836133be565b9150614a4982614a0a565b602082019050919050565b5f6020820190508181035f830152614a6b81614a32565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f60208284031215614ab457614ab3613467565b5b5f614ac184828501614765565b91505092915050565b5f81905092915050565b5f614adf8385614aca565b9350614aec8385846138de565b82840190509392505050565b5f614b04828486614ad4565b91508190509392505050565b614b1981613db6565b82525050565b5f606082019050614b325f8301866139bd565b614b3f6020830185614b10565b614b4c60408301846139bd565b949350505050565b5f81519050919050565b5f81905092915050565b5f819050602082019050919050565b614b80816139b4565b82525050565b5f614b918383614b77565b60208301905092915050565b5f602082019050919050565b5f614bb382614b54565b614bbd8185614b5e565b9350614bc883614b68565b805f5b83811015614bf8578151614bdf8882614b86565b9750614bea83614b9d565b925050600181019050614bcb565b5085935050505092915050565b5f614c108284614ba9565b915081905092915050565b5f608082019050614c2e5f8301876139bd565b614c3b6020830186613b0d565b614c486040830185613b0d565b614c5560608301846139bd565b95945050505050565b5f80fd5b5f80fd5b5f67ffffffffffffffff821115614c8057614c7f613836565b5b614c89826133f6565b9050602081019050919050565b5f614ca8614ca384614c66565b613894565b905082815260208101848484011115614cc457614cc3613832565b5b614ccf8482856133ce565b509392505050565b5f82601f830112614ceb57614cea6136c1565b5b8151614cfb848260208601614c96565b91505092915050565b5f60808284031215614d1957614d18614c5e565b5b614d236080613894565b90505f614d3284828501614151565b5f830152506020614d4584828501614151565b602083015250604082015167ffffffffffffffff811115614d6957614d68614c62565b5b614d7584828501614cd7565b604083015250606082015167ffffffffffffffff811115614d9957614d98614c62565b5b614da584828501614cd7565b60608301525092915050565b5f60208284031215614dc657614dc5613467565b5b5f82015167ffffffffffffffff811115614de357614de261346b565b5b614def84828501614d04565b91505092915050565b5f819050815f5260205f209050919050565b601f821115614e4b57614e1c81614df8565b614e25846144a2565b81016020851015614e34578190505b614e48614e40856144a2565b830182614582565b50505b505050565b614e59826133b4565b67ffffffffffffffff811115614e7257614e71613836565b5b614e7c8254614460565b614e87828285614e0a565b5f60209050601f831160018114614eb8575f8415614ea6578287015190505b614eb08582614612565b865550614f17565b601f198416614ec686614df8565b5f5b82811015614eed57848901518255600182019150602085019450602081019050614ec8565b86831015614f0a5784890151614f06601f8916826145f6565b8355505b6001600288020188555050505b505050505050565b5f81519050614f2d81613478565b92915050565b5f60208284031215614f4857614f47613467565b5b5f614f5584828501614f1f565b91505092915050565b614f67816139b4565b8114614f71575f80fd5b50565b5f81519050614f8281614f5e565b92915050565b5f60208284031215614f9d57614f9c613467565b5b5f614faa84828501614f74565b91505092915050565b5f604082019050614fc65f8301856139bd565b614fd36020830184613b0d565b9392505050565b5f614fe482613dd6565b614fee8185614aca565b9350614ffe8185602086016133ce565b80840191505092915050565b5f6150158284614fda565b915081905092915050565b5f60a0820190506150335f8301886139bd565b61504060208301876139bd565b61504d60408301866139bd565b61505a6060830185613b0d565b6150676080830184613b1c565b9695505050505050565b5f60ff82169050919050565b61508681615071565b82525050565b5f60808201905061509f5f8301876139bd565b6150ac602083018661507d565b6150b960408301856139bd565b6150c660608301846139bd565b9594505050505056fe43727367656e566572696669636174696f6e2875696e743235362063727349642c75696e74323536206d61784269744c656e6774682c62797465732063727344696765737429507265704b657967656e566572696669636174696f6e2875696e7432353620707265704b657967656e4964294b657967656e566572696669636174696f6e2875696e7432353620707265704b657967656e49642c75696e74323536206b657949642c4b65794469676573745b5d206b657944696765737473294b65794469676573742875696e7438206b6579547970652c627974657320646967657374294b65794469676573742875696e7438206b6579547970652c62797465732064696765737429 + ///0x608060405260043610610108575f3560e01c8063589adb0e11610094578063ad3cb1cc11610063578063ad3cb1cc14610353578063baff211e1461037d578063c55b8724146103a7578063caa367db146103e4578063d52f10eb1461040c57610108565b8063589adb0e1461029657806362978787146102be57806384b0196e146102e6578063936608ae1461031657610108565b80633c02f834116100db5780633c02f834146101c457806345af261b146101ec5780634610ffe8146102285780634f1ef2861461025057806352d1902d1461026c57610108565b80630d8e6e2c1461010c57806316c713d91461013657806319f4f6321461017257806339f73810146101ae575b5f80fd5b348015610117575f80fd5b50610120610436565b60405161012d9190613779565b60405180910390f35b348015610141575f80fd5b5061015c600480360381019061015791906137dd565b6104b1565b60405161016991906138ef565b60405180910390f35b34801561017d575f80fd5b50610198600480360381019061019391906137dd565b610582565b6040516101a59190613982565b60405180910390f35b3480156101b9575f80fd5b506101c261062f565b005b3480156101cf575f80fd5b506101ea60048036038101906101e591906139be565b61087e565b005b3480156101f7575f80fd5b50610212600480360381019061020d91906137dd565b610a2d565b60405161021f9190613982565b60405180910390f35b348015610233575f80fd5b5061024e60048036038101906102499190613ab2565b610ac2565b005b61026a60048036038101906102659190613c95565b611007565b005b348015610277575f80fd5b50610280611026565b60405161028d9190613d07565b60405180910390f35b3480156102a1575f80fd5b506102bc60048036038101906102b79190613d20565b611057565b005b3480156102c9575f80fd5b506102e460048036038101906102df9190613d7d565b6113a9565b005b3480156102f1575f80fd5b506102fa61188a565b60405161030d9796959493929190613f1d565b60405180910390f35b348015610321575f80fd5b5061033c600480360381019061033791906137dd565b611993565b60405161034a92919061422f565b60405180910390f35b34801561035e575f80fd5b50610367611d3a565b6040516103749190613779565b60405180910390f35b348015610388575f80fd5b50610391611d73565b60405161039e9190614264565b60405180910390f35b3480156103b2575f80fd5b506103cd60048036038101906103c891906137dd565b611d8a565b6040516103db9291906142c5565b60405180910390f35b3480156103ef575f80fd5b5061040a600480360381019061040591906142fa565b61209c565b005b348015610417575f80fd5b50610420612286565b60405161042d9190614264565b60405180910390f35b60606040518060400160405280600d81526020017f4b4d5347656e65726174696f6e000000000000000000000000000000000000008152506104775f61229d565b610481600161229d565b61048a5f61229d565b60405160200161049d94939291906143f3565b604051602081830303815290604052905090565b60605f6104bc612367565b90505f816003015f8581526020019081526020015f20549050816002015f8581526020019081526020015f205f8281526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561057457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161052b575b505050505092505050919050565b5f8061058c612367565b9050806001015f8481526020019081526020015f205f9054906101000a900460ff166105ef57826040517f84de13310000000000000000000000000000000000000000000000000000000081526004016105e69190614264565b60405180910390fd5b5f816006015f8581526020019081526020015f2054905081600d015f8281526020019081526020015f205f9054906101000a900460ff1692505050919050565b600161063961238e565b67ffffffffffffffff161461067a576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f6106856123b2565b9050805f0160089054906101000a900460ff16806106cd57508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b15610704576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff0219169083151502179055506107bd6040518060400160405280600d81526020017f4b4d5347656e65726174696f6e000000000000000000000000000000000000008152506040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506123d9565b5f6107c6612367565b905060f8600360058111156107de576107dd61390f565b5b901b816004018190555060f8600460058111156107fe576107fd61390f565b5b901b816005018190555060f860058081111561081d5761081c61390f565b5b901b8160090181905550505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2826040516108729190614473565b60405180910390a15050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ff91906144a0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461096e57336040517f0e56cf3d00000000000000000000000000000000000000000000000000000000815260040161096591906144cb565b60405180910390fd5b5f610977612367565b9050806009015f81548092919061098d90614511565b91905055505f816009015490508382600a015f8381526020019081526020015f20819055508282600d015f8381526020019081526020015f205f6101000a81548160ff021916908360018111156109e7576109e661390f565b5b02179055507f3f038f6f88cb3031b7718588403a2ec220576a868be07dde4c02b846ca352ef5818585604051610a1f93929190614558565b60405180910390a150505050565b5f80610a37612367565b9050806001015f8481526020019081526020015f205f9054906101000a900460ff16610a9a57826040517fda32d00f000000000000000000000000000000000000000000000000000000008152600401610a919190614264565b60405180910390fd5b80600d015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b8152600401610b0f91906144cb565b602060405180830381865afa158015610b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4e91906145c2565b610b8f57336040517faee86323000000000000000000000000000000000000000000000000000000008152600401610b8691906144cb565b60405180910390fd5b5f610b98612367565b90505f816006015f8881526020019081526020015f205490505f610bbe828989896123ef565b90505f610bcc8287876125c6565b9050835f015f8a81526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610c6c5788816040517f98fb957d000000000000000000000000000000000000000000000000000000008152600401610c639291906145ed565b60405180910390fd5b6001845f015f8b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f846002015f8b81526020019081526020015f205f8481526020019081526020015f2090508033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f81805490509050856001015f8c81526020019081526020015f205f9054906101000a900460ff16158015610d8f5750610d8e8161262b565b5b15610ffa576001866001015f8d81526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5b8a8a9050811015610e4557866007015f8d81526020019081526020015f208b8b83818110610df257610df1614614565b5b9050602002810190610e04919061464d565b908060018154018082558091505060019003905f5260205f2090600202015f909190919091508181610e369190614a89565b50508080600101915050610dc1565b5083866003015f8d81526020019081526020015f20819055508a86600801819055505f8167ffffffffffffffff811115610e8257610e81613b71565b5b604051908082528060200260200182016040528015610eb557816020015b6060815260200190600190039081610ea05790505b5090505f5b82811015610fba5773a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e3b2a874858381548110610f0557610f04614614565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610f4991906144cb565b5f60405180830381865afa158015610f63573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610f8b9190614bea565b60600151828281518110610fa257610fa1614614565b5b60200260200101819052508080600101915050610eba565b507feb85c26dbcad46b80a68a0f24cce7c2c90f0a1faded84184138839fc9e80a25b8c828d8d604051610ff09493929190614e02565b60405180910390a1505b5050505050505050505050565b61100f6126bc565b611018826127a2565b6110228282612895565b5050565b5f61102f6129b3565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b81526004016110a491906144cb565b602060405180830381865afa1580156110bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e391906145c2565b61112457336040517faee8632300000000000000000000000000000000000000000000000000000000815260040161111b91906144cb565b60405180910390fd5b5f61112d612367565b90505f61113985612a3a565b90505f6111478286866125c6565b9050825f015f8781526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156111e75785816040517f33ca1fe30000000000000000000000000000000000000000000000000000000081526004016111de9291906145ed565b60405180910390fd5b6001835f015f8881526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f836002015f8881526020019081526020015f205f8481526020019081526020015f2090508033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836001015f8881526020019081526020015f205f9054906101000a900460ff161580156113065750611305818054905061262b565b5b156113a0576001846001015f8981526020019081526020015f205f6101000a81548160ff02191690831515021790555082846003015f8981526020019081526020015f20819055505f846006015f8981526020019081526020015f205490507f78b179176d1f19d7c28e80823deba2624da2ca2ec64b1701f3632a87c9aedc928882604051611396929190614e47565b60405180910390a1505b50505050505050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e5275eaf336040518263ffffffff1660e01b81526004016113f691906144cb565b602060405180830381865afa158015611411573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143591906145c2565b61147657336040517faee8632300000000000000000000000000000000000000000000000000000000815260040161146d91906144cb565b60405180910390fd5b5f61147f612367565b90505f81600a015f8881526020019081526020015f205490505f6114a588838989612a92565b90505f6114b38287876125c6565b9050835f015f8a81526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156115535788816040517ffcf5a6e900000000000000000000000000000000000000000000000000000000815260040161154a9291906145ed565b60405180910390fd5b6001845f015f8b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f846002015f8b81526020019081526020015f205f8481526020019081526020015f2090508033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f81805490509050856001015f8c81526020019081526020015f205f9054906101000a900460ff1615801561167657506116758161262b565b5b1561187d576001866001015f8d81526020019081526020015f205f6101000a81548160ff021916908315150217905550898987600b015f8e81526020019081526020015f2091826116c8929190614968565b5083866003015f8d81526020019081526020015f20819055508a86600c01819055505f8167ffffffffffffffff81111561170557611704613b71565b5b60405190808252806020026020018201604052801561173857816020015b60608152602001906001900390816117235790505b5090505f5b8281101561183d5773a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e3b2a87485838154811061178857611787614614565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016117cc91906144cb565b5f60405180830381865afa1580156117e6573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061180e9190614bea565b6060015182828151811061182557611824614614565b5b6020026020010181905250808060010191505061173d565b507f2258b73faed33fb2e2ea454403bef974920caf682ab3a723484fcf67553b16a28c828d8d6040516118739493929190614e9a565b60405180910390a1505b5050505050505050505050565b5f6060805f805f60605f61189c612b19565b90505f801b815f01541480156118b757505f801b8160010154145b6118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90614f29565b60405180910390fd5b6118fe612b40565b611906612bde565b46305f801b5f67ffffffffffffffff81111561192557611924613b71565b5b6040519080825280602002602001820160405280156119535781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b6060805f61199f612367565b9050806001015f8581526020019081526020015f205f9054906101000a900460ff16611a0257836040517f84de13310000000000000000000000000000000000000000000000000000000081526004016119f99190614264565b60405180910390fd5b5f816003015f8681526020019081526020015f205490505f826002015f8781526020019081526020015f205f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015611ab957602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611a70575b505050505090505f815190505f8167ffffffffffffffff811115611ae057611adf613b71565b5b604051908082528060200260200182016040528015611b1357816020015b6060815260200190600190039081611afe5790505b5090505f5b82811015611bf85773a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e3b2a874858381518110611b6357611b62614614565b5b60200260200101516040518263ffffffff1660e01b8152600401611b8791906144cb565b5f60405180830381865afa158015611ba1573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611bc99190614bea565b60600151828281518110611be057611bdf614614565b5b60200260200101819052508080600101915050611b18565b5080856007015f8a81526020019081526020015f2080805480602002602001604051908101604052809291908181526020015f905b82821015611d26578382905f5260205f2090600202016040518060400160405290815f82015f9054906101000a900460ff166001811115611c7157611c7061390f565b5b6001811115611c8357611c8261390f565b5b8152602001600182018054611c979061479b565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc39061479b565b8015611d0e5780601f10611ce557610100808354040283529160200191611d0e565b820191905f5260205f20905b815481529060010190602001808311611cf157829003601f168201915b50505050508152505081526020019060010190611c2d565b505050509050965096505050505050915091565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b5f80611d7d612367565b905080600c015491505090565b6060805f611d96612367565b9050806001015f8581526020019081526020015f205f9054906101000a900460ff16611df957836040517fda32d00f000000000000000000000000000000000000000000000000000000008152600401611df09190614264565b60405180910390fd5b5f816003015f8681526020019081526020015f205490505f826002015f8781526020019081526020015f205f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015611eb057602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611e67575b505050505090505f815190505f8167ffffffffffffffff811115611ed757611ed6613b71565b5b604051908082528060200260200182016040528015611f0a57816020015b6060815260200190600190039081611ef55790505b5090505f5b82811015611fef5773a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663e3b2a874858381518110611f5a57611f59614614565b5b60200260200101516040518263ffffffff1660e01b8152600401611f7e91906144cb565b5f60405180830381865afa158015611f98573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611fc09190614bea565b60600151828281518110611fd757611fd6614614565b5b60200260200101819052508080600101915050611f0f565b508085600b015f8a81526020019081526020015f208080546120109061479b565b80601f016020809104026020016040519081016040528092919081815260200182805461203c9061479b565b80156120875780601f1061205e57610100808354040283529160200191612087565b820191905f5260205f20905b81548152906001019060200180831161206a57829003601f168201915b50505050509050965096505050505050915091565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120f9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061211d91906144a0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461218c57336040517f0e56cf3d00000000000000000000000000000000000000000000000000000000815260040161218391906144cb565b60405180910390fd5b5f612195612367565b9050806004015f8154809291906121ab90614511565b91905055505f81600401549050816005015f8154809291906121cc90614511565b91905055505f8260050154905080836006015f8481526020019081526020015f208190555081836006015f8381526020019081526020015f20819055505f8484600d015f8581526020019081526020015f205f6101000a81548160ff0219169083600181111561223f5761223e61390f565b5b02179055507f02024007d96574dbc9d11328bfee9893e7c7bb4ef4aa806df33bfdf454eb5e6083828760405161227793929190614558565b60405180910390a15050505050565b5f80612290612367565b9050806008015491505090565b60605f60016122ab84612c7c565b0190505f8167ffffffffffffffff8111156122c9576122c8613b71565b5b6040519080825280601f01601f1916602001820160405280156122fb5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561235c578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161235157612350614f47565b5b0494505f8503612308575b819350505050919050565b5f7f0b8fdb1f0a6356dd20a6cbc6f9668fac23b85f96575d10e333e603faa794ac00905090565b5f6123976123b2565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6123e1612dcd565b6123eb8282612e0d565b5050565b5f808383905067ffffffffffffffff81111561240e5761240d613b71565b5b60405190808252806020026020018201604052801561243c5781602001602082028036833780820191505090505b5090505f5b84849050811015612540576040518060600160405280602581526020016154ef602591398051906020012085858381811061247f5761247e614614565b5b9050602002810190612491919061464d565b5f0160208101906124a29190614f74565b8686848181106124b5576124b4614614565b5b90506020028101906124c7919061464d565b80602001906124d69190614702565b6040516124e4929190614fcd565b60405180910390206040516020016124fe93929190614ff4565b6040516020818303038152906040528051906020012082828151811061252757612526614614565b5b6020026020010181815250508080600101915050612441565b506125bb6040518060a001604052806072815260200161547d607291398051906020012087878460405160200161257791906150da565b604051602081830303815290604052805190602001206040516020016125a094939291906150f0565b60405160208183030381529060405280519060200120612e5e565b915050949350505050565b5f806126158585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050612e77565b905061262081612ea1565b809150509392505050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663b4722bc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ae9190615147565b905080831015915050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061276957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612750612f71565b73ffffffffffffffffffffffffffffffffffffffff1614155b156127a0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127ff573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061282391906144a0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461289257336040517f0e56cf3d00000000000000000000000000000000000000000000000000000000815260040161288991906144cb565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156128fd57506040513d601f19601f820116820180604052508101906128fa919061519c565b60015b61293e57816040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161293591906144cb565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b81146129a457806040517faa1d49a400000000000000000000000000000000000000000000000000000000815260040161299b9190613d07565b60405180910390fd5b6129ae8383612fc4565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614612a38576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f612a8b6040518060600160405280602c8152602001615451602c91398051906020012083604051602001612a709291906151c7565b60405160208183030381529060405280519060200120612e5e565b9050919050565b5f612b0f60405180608001604052806046815260200161540b604691398051906020012086868686604051602001612acb929190614fcd565b60405160208183030381529060405280519060200120604051602001612af494939291906150f0565b60405160208183030381529060405280519060200120612e5e565b9050949350505050565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f612b4b612b19565b9050806002018054612b5c9061479b565b80601f0160208091040260200160405190810160405280929190818152602001828054612b889061479b565b8015612bd35780601f10612baa57610100808354040283529160200191612bd3565b820191905f5260205f20905b815481529060010190602001808311612bb657829003601f168201915b505050505091505090565b60605f612be9612b19565b9050806003018054612bfa9061479b565b80601f0160208091040260200160405190810160405280929190818152602001828054612c269061479b565b8015612c715780601f10612c4857610100808354040283529160200191612c71565b820191905f5260205f20905b815481529060010190602001808311612c5457829003601f168201915b505050505091505090565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612cd8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612cce57612ccd614f47565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612d15576d04ee2d6d415b85acef81000000008381612d0b57612d0a614f47565b5b0492506020810190505b662386f26fc100008310612d4457662386f26fc100008381612d3a57612d39614f47565b5b0492506010810190505b6305f5e1008310612d6d576305f5e1008381612d6357612d62614f47565b5b0492506008810190505b6127108310612d92576127108381612d8857612d87614f47565b5b0492506004810190505b60648310612db55760648381612dab57612daa614f47565b5b0492506002810190505b600a8310612dc4576001810190505b80915050919050565b612dd5613036565b612e0b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b612e15612dcd565b5f612e1e612b19565b905082816002019081612e319190615246565b5081816003019081612e439190615246565b505f801b815f01819055505f801b8160010181905550505050565b5f612e70612e6a613054565b83613062565b9050919050565b5f805f80612e8586866130a2565b925092509250612e9582826130f7565b82935050505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663203d0114826040518263ffffffff1660e01b8152600401612eee91906144cb565b602060405180830381865afa158015612f09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f2d91906145c2565b612f6e57806040517f2a7c6ef6000000000000000000000000000000000000000000000000000000008152600401612f6591906144cb565b60405180910390fd5b50565b5f612f9d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b613259565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612fcd82613262565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f8151111561302957613023828261332b565b50613032565b6130316133ab565b5b5050565b5f61303f6123b2565b5f0160089054906101000a900460ff16905090565b5f61305d6133e7565b905090565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f60418451036130e2575f805f602087015192506040870151915060608701515f1a90506130d48882858561344a565b9550955095505050506130f0565b5f600285515f1b9250925092505b9250925092565b5f600381111561310a5761310961390f565b5b82600381111561311d5761311c61390f565b5b031561325557600160038111156131375761313661390f565b5b82600381111561314a5761314961390f565b5b03613181576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156131955761319461390f565b5b8260038111156131a8576131a761390f565b5b036131ec57805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016131e39190614264565b60405180910390fd5b6003808111156131ff576131fe61390f565b5b8260038111156132125761321161390f565b5b0361325457806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161324b9190613d07565b60405180910390fd5b5b5050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b036132bd57806040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016132b491906144cb565b60405180910390fd5b806132e97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b613259565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516133549190615345565b5f60405180830381855af49150503d805f811461338c576040519150601f19603f3d011682016040523d82523d5f602084013e613391565b606091505b50915091506133a1858383613531565b9250505092915050565b5f3411156133e5576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6134116135be565b613419613634565b463060405160200161342f95949392919061535b565b60405160208183030381529060405280519060200120905090565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115613486575f600385925092509250613527565b5f6001888888886040515f81526020016040526040516134a994939291906153c7565b6020604051602081039080840390855afa1580156134c9573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361351a575f60015f801b93509350935050613527565b805f805f1b935093509350505b9450945094915050565b60608261354657613541826136ab565b6135b6565b5f825114801561356c57505f8473ffffffffffffffffffffffffffffffffffffffff163b145b156135ae57836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016135a591906144cb565b60405180910390fd5b8190506135b7565b5b9392505050565b5f806135c8612b19565b90505f6135d3612b40565b90505f815111156135ef57808051906020012092505050613631565b5f825f015490505f801b811461360a57809350505050613631565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f8061363e612b19565b90505f613649612bde565b90505f81511115613665578080519060200120925050506136a8565b5f826001015490505f801b8114613681578093505050506136a8565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f815111156136bd5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561372657808201518184015260208101905061370b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61374b826136ef565b61375581856136f9565b9350613765818560208601613709565b61376e81613731565b840191505092915050565b5f6020820190508181035f8301526137918184613741565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6137bc816137aa565b81146137c6575f80fd5b50565b5f813590506137d7816137b3565b92915050565b5f602082840312156137f2576137f16137a2565b5b5f6137ff848285016137c9565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61385a82613831565b9050919050565b61386a81613850565b82525050565b5f61387b8383613861565b60208301905092915050565b5f602082019050919050565b5f61389d82613808565b6138a78185613812565b93506138b283613822565b805f5b838110156138e25781516138c98882613870565b97506138d483613887565b9250506001810190506138b5565b5085935050505092915050565b5f6020820190508181035f8301526139078184613893565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6002811061394d5761394c61390f565b5b50565b5f81905061395d8261393c565b919050565b5f61396c82613950565b9050919050565b61397c81613962565b82525050565b5f6020820190506139955f830184613973565b92915050565b600281106139a7575f80fd5b50565b5f813590506139b88161399b565b92915050565b5f80604083850312156139d4576139d36137a2565b5b5f6139e1858286016137c9565b92505060206139f2858286016139aa565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112613a1d57613a1c6139fc565b5b8235905067ffffffffffffffff811115613a3a57613a39613a00565b5b602083019150836020820283011115613a5657613a55613a04565b5b9250929050565b5f8083601f840112613a7257613a716139fc565b5b8235905067ffffffffffffffff811115613a8f57613a8e613a00565b5b602083019150836001820283011115613aab57613aaa613a04565b5b9250929050565b5f805f805f60608688031215613acb57613aca6137a2565b5b5f613ad8888289016137c9565b955050602086013567ffffffffffffffff811115613af957613af86137a6565b5b613b0588828901613a08565b9450945050604086013567ffffffffffffffff811115613b2857613b276137a6565b5b613b3488828901613a5d565b92509250509295509295909350565b613b4c81613850565b8114613b56575f80fd5b50565b5f81359050613b6781613b43565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613ba782613731565b810181811067ffffffffffffffff82111715613bc657613bc5613b71565b5b80604052505050565b5f613bd8613799565b9050613be48282613b9e565b919050565b5f67ffffffffffffffff821115613c0357613c02613b71565b5b613c0c82613731565b9050602081019050919050565b828183375f83830152505050565b5f613c39613c3484613be9565b613bcf565b905082815260208101848484011115613c5557613c54613b6d565b5b613c60848285613c19565b509392505050565b5f82601f830112613c7c57613c7b6139fc565b5b8135613c8c848260208601613c27565b91505092915050565b5f8060408385031215613cab57613caa6137a2565b5b5f613cb885828601613b59565b925050602083013567ffffffffffffffff811115613cd957613cd86137a6565b5b613ce585828601613c68565b9150509250929050565b5f819050919050565b613d0181613cef565b82525050565b5f602082019050613d1a5f830184613cf8565b92915050565b5f805f60408486031215613d3757613d366137a2565b5b5f613d44868287016137c9565b935050602084013567ffffffffffffffff811115613d6557613d646137a6565b5b613d7186828701613a5d565b92509250509250925092565b5f805f805f60608688031215613d9657613d956137a2565b5b5f613da3888289016137c9565b955050602086013567ffffffffffffffff811115613dc457613dc36137a6565b5b613dd088828901613a5d565b9450945050604086013567ffffffffffffffff811115613df357613df26137a6565b5b613dff88828901613a5d565b92509250509295509295909350565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b613e4281613e0e565b82525050565b613e51816137aa565b82525050565b613e6081613850565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613e98816137aa565b82525050565b5f613ea98383613e8f565b60208301905092915050565b5f602082019050919050565b5f613ecb82613e66565b613ed58185613e70565b9350613ee083613e80565b805f5b83811015613f10578151613ef78882613e9e565b9750613f0283613eb5565b925050600181019050613ee3565b5085935050505092915050565b5f60e082019050613f305f83018a613e39565b8181036020830152613f428189613741565b90508181036040830152613f568188613741565b9050613f656060830187613e48565b613f726080830186613e57565b613f7f60a0830185613cf8565b81810360c0830152613f918184613ec1565b905098975050505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f613fe2826136ef565b613fec8185613fc8565b9350613ffc818560208601613709565b61400581613731565b840191505092915050565b5f61401b8383613fd8565b905092915050565b5f602082019050919050565b5f61403982613f9f565b6140438185613fa9565b93508360208202850161405585613fb9565b805f5b8581101561409057848403895281516140718582614010565b945061407c83614023565b925060208a01995050600181019050614058565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b600281106140dc576140db61390f565b5b50565b5f8190506140ec826140cb565b919050565b5f6140fb826140df565b9050919050565b61410b816140f1565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f61413582614111565b61413f818561411b565b935061414f818560208601613709565b61415881613731565b840191505092915050565b5f604083015f8301516141785f860182614102565b5060208301518482036020860152614190828261412b565b9150508091505092915050565b5f6141a88383614163565b905092915050565b5f602082019050919050565b5f6141c6826140a2565b6141d081856140ac565b9350836020820285016141e2856140bc565b805f5b8581101561421d57848403895281516141fe858261419d565b9450614209836141b0565b925060208a019950506001810190506141e5565b50829750879550505050505092915050565b5f6040820190508181035f830152614247818561402f565b9050818103602083015261425b81846141bc565b90509392505050565b5f6020820190506142775f830184613e48565b92915050565b5f82825260208201905092915050565b5f61429782614111565b6142a1818561427d565b93506142b1818560208601613709565b6142ba81613731565b840191505092915050565b5f6040820190508181035f8301526142dd818561402f565b905081810360208301526142f1818461428d565b90509392505050565b5f6020828403121561430f5761430e6137a2565b5b5f61431c848285016139aa565b91505092915050565b5f81905092915050565b5f614339826136ef565b6143438185614325565b9350614353818560208601613709565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f614393600283614325565b915061439e8261435f565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6143dd600183614325565b91506143e8826143a9565b600182019050919050565b5f6143fe828761432f565b915061440982614387565b9150614415828661432f565b9150614420826143d1565b915061442c828561432f565b9150614437826143d1565b9150614443828461432f565b915081905095945050505050565b5f67ffffffffffffffff82169050919050565b61446d81614451565b82525050565b5f6020820190506144865f830184614464565b92915050565b5f8151905061449a81613b43565b92915050565b5f602082840312156144b5576144b46137a2565b5b5f6144c28482850161448c565b91505092915050565b5f6020820190506144de5f830184613e57565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61451b826137aa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361454d5761454c6144e4565b5b600182019050919050565b5f60608201905061456b5f830186613e48565b6145786020830185613e48565b6145856040830184613973565b949350505050565b5f8115159050919050565b6145a18161458d565b81146145ab575f80fd5b50565b5f815190506145bc81614598565b92915050565b5f602082840312156145d7576145d66137a2565b5b5f6145e4848285016145ae565b91505092915050565b5f6040820190506146005f830185613e48565b61460d6020830184613e57565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f80fd5b5f80fd5b5f80fd5b5f8235600160400383360303811261466857614667614641565b5b80830191505092915050565b60028110614680575f80fd5b50565b5f813561468f81614674565b80915050919050565b5f815f1b9050919050565b5f60ff6146af84614698565b9350801983169250808416831791505092915050565b5f6146cf826140df565b9050919050565b5f819050919050565b6146e8826146c5565b6146fb6146f4826146d6565b83546146a3565b8255505050565b5f808335600160200384360303811261471e5761471d614641565b5b80840192508235915067ffffffffffffffff8211156147405761473f614645565b5b60208301925060018202360383131561475c5761475b614649565b5b509250929050565b5f82905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806147b257607f821691505b6020821081036147c5576147c461476e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026148277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826147ec565b61483186836147ec565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61486c614867614862846137aa565b614849565b6137aa565b9050919050565b5f819050919050565b61488583614852565b61489961489182614873565b8484546147f8565b825550505050565b5f90565b6148ad6148a1565b6148b881848461487c565b505050565b5b818110156148db576148d05f826148a5565b6001810190506148be565b5050565b601f821115614920576148f1816147cb565b6148fa846147dd565b81016020851015614909578190505b61491d614915856147dd565b8301826148bd565b50505b505050565b5f82821c905092915050565b5f6149405f1984600802614925565b1980831691505092915050565b5f6149588383614931565b9150826002028217905092915050565b6149728383614764565b67ffffffffffffffff81111561498b5761498a613b71565b5b614995825461479b565b6149a08282856148df565b5f601f8311600181146149cd575f84156149bb578287013590505b6149c5858261494d565b865550614a2c565b601f1984166149db866147cb565b5f5b82811015614a02578489013582556001820191506020850194506020810190506149dd565b86831015614a1f5784890135614a1b601f891682614931565b8355505b6001600288020188555050505b50505050505050565b614a40838383614968565b505050565b5f81015f830180614a5581614683565b9050614a6181846146df565b5050506001810160208301614a768185614702565b614a81818386614a35565b505050505050565b614a938282614a45565b5050565b5f80fd5b5f80fd5b5f67ffffffffffffffff821115614ab957614ab8613b71565b5b614ac282613731565b9050602081019050919050565b5f614ae1614adc84614a9f565b613bcf565b905082815260208101848484011115614afd57614afc613b6d565b5b614b08848285613709565b509392505050565b5f82601f830112614b2457614b236139fc565b5b8151614b34848260208601614acf565b91505092915050565b5f60808284031215614b5257614b51614a97565b5b614b5c6080613bcf565b90505f614b6b8482850161448c565b5f830152506020614b7e8482850161448c565b602083015250604082015167ffffffffffffffff811115614ba257614ba1614a9b565b5b614bae84828501614b10565b604083015250606082015167ffffffffffffffff811115614bd257614bd1614a9b565b5b614bde84828501614b10565b60608301525092915050565b5f60208284031215614bff57614bfe6137a2565b5b5f82015167ffffffffffffffff811115614c1c57614c1b6137a6565b5b614c2884828501614b3d565b91505092915050565b5f819050919050565b5f81359050614c4881614674565b92915050565b5f614c5c6020840184614c3a565b905092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083356001602003843603038112614c8c57614c8b614c6c565b5b83810192508235915060208301925067ffffffffffffffff821115614cb457614cb3614c64565b5b600182023603831315614cca57614cc9614c68565b5b509250929050565b5f614cdd838561411b565b9350614cea838584613c19565b614cf383613731565b840190509392505050565b5f60408301614d0f5f840184614c4e565b614d1b5f860182614102565b50614d296020840184614c70565b8583036020870152614d3c838284614cd2565b925050508091505092915050565b5f614d558383614cfe565b905092915050565b5f82356001604003833603038112614d7857614d77614c6c565b5b82810191505092915050565b5f602082019050919050565b5f614d9b83856140ac565b935083602084028501614dad84614c31565b805f5b87811015614df0578484038952614dc78284614d5d565b614dd18582614d4a565b9450614ddc83614d84565b925060208a01995050600181019050614db0565b50829750879450505050509392505050565b5f606082019050614e155f830187613e48565b8181036020830152614e27818661402f565b90508181036040830152614e3c818486614d90565b905095945050505050565b5f604082019050614e5a5f830185613e48565b614e676020830184613e48565b9392505050565b5f614e79838561427d565b9350614e86838584613c19565b614e8f83613731565b840190509392505050565b5f606082019050614ead5f830187613e48565b8181036020830152614ebf818661402f565b90508181036040830152614ed4818486614e6e565b905095945050505050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f614f136015836136f9565b9150614f1e82614edf565b602082019050919050565b5f6020820190508181035f830152614f4081614f07565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f60208284031215614f8957614f886137a2565b5b5f614f9684828501614c3a565b91505092915050565b5f81905092915050565b5f614fb48385614f9f565b9350614fc1838584613c19565b82840190509392505050565b5f614fd9828486614fa9565b91508190509392505050565b614fee816140f1565b82525050565b5f6060820190506150075f830186613cf8565b6150146020830185614fe5565b6150216040830184613cf8565b949350505050565b5f81519050919050565b5f81905092915050565b5f819050602082019050919050565b61505581613cef565b82525050565b5f615066838361504c565b60208301905092915050565b5f602082019050919050565b5f61508882615029565b6150928185615033565b935061509d8361503d565b805f5b838110156150cd5781516150b4888261505b565b97506150bf83615072565b9250506001810190506150a0565b5085935050505092915050565b5f6150e5828461507e565b915081905092915050565b5f6080820190506151035f830187613cf8565b6151106020830186613e48565b61511d6040830185613e48565b61512a6060830184613cf8565b95945050505050565b5f81519050615141816137b3565b92915050565b5f6020828403121561515c5761515b6137a2565b5b5f61516984828501615133565b91505092915050565b61517b81613cef565b8114615185575f80fd5b50565b5f8151905061519681615172565b92915050565b5f602082840312156151b1576151b06137a2565b5b5f6151be84828501615188565b91505092915050565b5f6040820190506151da5f830185613cf8565b6151e76020830184613e48565b9392505050565b5f819050815f5260205f209050919050565b601f82111561524157615212816151ee565b61521b846147dd565b8101602085101561522a578190505b61523e615236856147dd565b8301826148bd565b50505b505050565b61524f826136ef565b67ffffffffffffffff81111561526857615267613b71565b5b615272825461479b565b61527d828285615200565b5f60209050601f8311600181146152ae575f841561529c578287015190505b6152a6858261494d565b86555061530d565b601f1984166152bc866151ee565b5f5b828110156152e3578489015182556001820191506020850194506020810190506152be565b8683101561530057848901516152fc601f891682614931565b8355505b6001600288020188555050505b505050505050565b5f61531f82614111565b6153298185614f9f565b9350615339818560208601613709565b80840191505092915050565b5f6153508284615315565b915081905092915050565b5f60a08201905061536e5f830188613cf8565b61537b6020830187613cf8565b6153886040830186613cf8565b6153956060830185613e48565b6153a26080830184613e57565b9695505050505050565b5f60ff82169050919050565b6153c1816153ac565b82525050565b5f6080820190506153da5f830187613cf8565b6153e760208301866153b8565b6153f46040830185613cf8565b6154016060830184613cf8565b9594505050505056fe43727367656e566572696669636174696f6e2875696e743235362063727349642c75696e74323536206d61784269744c656e6774682c62797465732063727344696765737429507265704b657967656e566572696669636174696f6e2875696e7432353620707265704b657967656e4964294b657967656e566572696669636174696f6e2875696e7432353620707265704b657967656e49642c75696e74323536206b657949642c4b65794469676573745b5d206b657944696765737473294b65794469676573742875696e7438206b6579547970652c627974657320646967657374294b65794469676573742875696e7438206b6579547970652c62797465732064696765737429 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80`@R`\x046\x10a\x01\x08W_5`\xE0\x1C\x80cX\x9A\xDB\x0E\x11a\0\x94W\x80c\xAD<\xB1\xCC\x11a\0cW\x80c\xAD<\xB1\xCC\x14a\x03SW\x80c\xBA\xFF!\x1E\x14a\x03}W\x80c\xC5[\x87$\x14a\x03\xA7W\x80c\xCA\xA3g\xDB\x14a\x03\xE4W\x80c\xD5/\x10\xEB\x14a\x04\x0CWa\x01\x08V[\x80cX\x9A\xDB\x0E\x14a\x02\x96W\x80cb\x97\x87\x87\x14a\x02\xBEW\x80c\x84\xB0\x19n\x14a\x02\xE6W\x80c\x93f\x08\xAE\x14a\x03\x16Wa\x01\x08V[\x80c<\x02\xF84\x11a\0\xDBW\x80c<\x02\xF84\x14a\x01\xC4W\x80cE\xAF&\x1B\x14a\x01\xECW\x80cF\x10\xFF\xE8\x14a\x02(W\x80cO\x1E\xF2\x86\x14a\x02PW\x80cR\xD1\x90-\x14a\x02lWa\x01\x08V[\x80c\r\x8En,\x14a\x01\x0CW\x80c\x16\xC7\x13\xD9\x14a\x016W\x80c\x19\xF4\xF62\x14a\x01rW\x80c9\xF78\x10\x14a\x01\xAEW[_\x80\xFD[4\x80\x15a\x01\x17W_\x80\xFD[Pa\x01 a\x046V[`@Qa\x01-\x91\x90a4>V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01AW_\x80\xFD[Pa\x01\\`\x04\x806\x03\x81\x01\x90a\x01W\x91\x90a4\xA2V[a\x04\xB1V[`@Qa\x01i\x91\x90a5\xB4V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01}W_\x80\xFD[Pa\x01\x98`\x04\x806\x03\x81\x01\x90a\x01\x93\x91\x90a4\xA2V[a\x05\x82V[`@Qa\x01\xA5\x91\x90a6GV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xB9W_\x80\xFD[Pa\x01\xC2a\x06/V[\0[4\x80\x15a\x01\xCFW_\x80\xFD[Pa\x01\xEA`\x04\x806\x03\x81\x01\x90a\x01\xE5\x91\x90a6\x83V[a\x08~V[\0[4\x80\x15a\x01\xF7W_\x80\xFD[Pa\x02\x12`\x04\x806\x03\x81\x01\x90a\x02\r\x91\x90a4\xA2V[a\n-V[`@Qa\x02\x1F\x91\x90a6GV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x023W_\x80\xFD[Pa\x02N`\x04\x806\x03\x81\x01\x90a\x02I\x91\x90a7wV[a\n\xC2V[\0[a\x02j`\x04\x806\x03\x81\x01\x90a\x02e\x91\x90a9ZV[a\x0E3V[\0[4\x80\x15a\x02wW_\x80\xFD[Pa\x02\x80a\x0ERV[`@Qa\x02\x8D\x91\x90a9\xCCV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\xA1W_\x80\xFD[Pa\x02\xBC`\x04\x806\x03\x81\x01\x90a\x02\xB7\x91\x90a9\xE5V[a\x0E\x83V[\0[4\x80\x15a\x02\xC9W_\x80\xFD[Pa\x02\xE4`\x04\x806\x03\x81\x01\x90a\x02\xDF\x91\x90a:BV[a\x11\xD5V[\0[4\x80\x15a\x02\xF1W_\x80\xFD[Pa\x02\xFAa\x14\xE2V[`@Qa\x03\r\x97\x96\x95\x94\x93\x92\x91\x90a;\xE2V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03!W_\x80\xFD[Pa\x03<`\x04\x806\x03\x81\x01\x90a\x037\x91\x90a4\xA2V[a\x15\xEBV[`@Qa\x03J\x92\x91\x90a>\xF4V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03^W_\x80\xFD[Pa\x03ga\x18\x9EV[`@Qa\x03t\x91\x90a4>V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\x88W_\x80\xFD[Pa\x03\x91a\x18\xD7V[`@Qa\x03\x9E\x91\x90a?)V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\xB2W_\x80\xFD[Pa\x03\xCD`\x04\x806\x03\x81\x01\x90a\x03\xC8\x91\x90a4\xA2V[a\x18\xEEV[`@Qa\x03\xDB\x92\x91\x90a?\x8AV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\xEFW_\x80\xFD[Pa\x04\n`\x04\x806\x03\x81\x01\x90a\x04\x05\x91\x90a?\xBFV[a\x1B\x0CV[\0[4\x80\x15a\x04\x17W_\x80\xFD[Pa\x04 a\x1C\xF6V[`@Qa\x04-\x91\x90a?)V[`@Q\x80\x91\x03\x90\xF3[```@Q\x80`@\x01`@R\x80`\r\x81R` \x01\x7FKMSGeneration\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RPa\x04w_a\x1D\rV[a\x04\x81`\x01a\x1D\rV[a\x04\x8A_a\x1D\rV[`@Q` \x01a\x04\x9D\x94\x93\x92\x91\x90a@\xB8V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x90V[``_a\x04\xBCa\x1D\xD7V[\x90P_\x81`\x04\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x02\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x82\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x05tW` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x05+W[PPPPP\x92PPP\x91\x90PV[_\x80a\x05\x8Ca\x1D\xD7V[\x90P\x80`\x01\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\x05\xEFW\x82`@Q\x7F\x84\xDE\x131\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\x81R`\x04\x01a\x05\xE6\x91\x90a?)V[`@Q\x80\x91\x03\x90\xFD[_\x81`\x07\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x0E\x01_\x82\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x92PPP\x91\x90PV[`\x01a\x069a\x1D\xFEV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x06zW`@Q\x7FoOs\x1F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02_a\x06\x85a\x1E\"V[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x80a\x06\xCDWP\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x15[\x15a\x07\x04W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`\x01\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPa\x07\xBD`@Q\x80`@\x01`@R\x80`\r\x81R` \x01\x7FKMSGeneration\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RP`@Q\x80`@\x01`@R\x80`\x01\x81R` \x01\x7F1\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\x81RPa\x1EIV[_a\x07\xC6a\x1D\xD7V[\x90P`\xF8`\x03`\x05\x81\x11\x15a\x07\xDEWa\x07\xDDa5\xD4V[[\x90\x1B\x81`\x05\x01\x81\x90UP`\xF8`\x04`\x05\x81\x11\x15a\x07\xFEWa\x07\xFDa5\xD4V[[\x90\x1B\x81`\x06\x01\x81\x90UP`\xF8`\x05\x80\x81\x11\x15a\x08\x1DWa\x08\x1Ca5\xD4V[[\x90\x1B\x81`\n\x01\x81\x90UPP_\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x82`@Qa\x08r\x91\x90aA8V[`@Q\x80\x91\x03\x90\xA1PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x08\xDBW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08\xFF\x91\x90aAeV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\tnW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\te\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[_a\twa\x1D\xD7V[\x90P\x80`\n\x01_\x81T\x80\x92\x91\x90a\t\x8D\x90aA\xD6V[\x91\x90PUP_\x81`\n\x01T\x90P\x83\x82`\x0B\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x82\x82`\x0E\x01_\x83\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83`\x01\x81\x11\x15a\t\xE7Wa\t\xE6a5\xD4V[[\x02\x17\x90UP\x7F?\x03\x8Fo\x88\xCB01\xB7q\x85\x88@:.\xC2 Wj\x86\x8B\xE0}\xDEL\x02\xB8F\xCA5.\xF5\x81\x85\x85`@Qa\n\x1F\x93\x92\x91\x90aB\x1DV[`@Q\x80\x91\x03\x90\xA1PPPPV[_\x80a\n7a\x1D\xD7V[\x90P\x80`\x01\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\n\x9AW\x82`@Q\x7F\xDA2\xD0\x0F\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\x81R`\x04\x01a\n\x91\x91\x90a?)V[`@Q\x80\x91\x03\x90\xFD[\x80`\x0E\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0B\x0F\x91\x90aA\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0B*W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0BN\x91\x90aB\x87V[a\x0B\x8FW3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x0B\x86\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[_a\x0B\x98a\x1D\xD7V[\x90P_\x81`\x07\x01_\x88\x81R` \x01\x90\x81R` \x01_ T\x90P_a\x0B\xBE\x82\x89\x89\x89a\x1E_V[\x90P_a\x0B\xCC\x82\x87\x87a 6V[\x90P\x83_\x01_\x8A\x81R` \x01\x90\x81R` \x01_ _\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x0ClW\x88\x81`@Q\x7F\x98\xFB\x95}\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\x81R`\x04\x01a\x0Cc\x92\x91\x90aB\xB2V[`@Q\x80\x91\x03\x90\xFD[`\x01\x84_\x01_\x8B\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_a\x0C\xDC\x8A\x84a \x9BV[\x90P\x84`\x01\x01_\x8B\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\r\x11WPa\r\x10\x81Qa\"\xF0V[[\x15a\x0E'W`\x01\x85`\x01\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_[\x89\x89\x90P\x81\x10\x15a\r\xC7W\x85`\x08\x01_\x8C\x81R` \x01\x90\x81R` \x01_ \x8A\x8A\x83\x81\x81\x10a\rtWa\rsaB\xD9V[[\x90P` \x02\x81\x01\x90a\r\x86\x91\x90aC\x12V[\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x90`\x02\x02\x01_\x90\x91\x90\x91\x90\x91P\x81\x81a\r\xB8\x91\x90aGNV[PP\x80\x80`\x01\x01\x91PPa\rCV[P\x82\x85`\x04\x01_\x8C\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x89\x85`\t\x01\x81\x90UP\x7F\xEB\x85\xC2m\xBC\xADF\xB8\nh\xA0\xF2L\xCE|,\x90\xF0\xA1\xFA\xDE\xD8A\x84\x13\x889\xFC\x9E\x80\xA2[\x8A\x82\x8B\x8B`@Qa\x0E\x1E\x94\x93\x92\x91\x90aI-V[`@Q\x80\x91\x03\x90\xA1[PPPPPPPPPPV[a\x0E;a#\x81V[a\x0ED\x82a$gV[a\x0EN\x82\x82a%ZV[PPV[_a\x0E[a&xV[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\xD0\x91\x90aA\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E\xEBW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0F\x0F\x91\x90aB\x87V[a\x0FPW3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x0FG\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[_a\x0FYa\x1D\xD7V[\x90P_a\x0Fe\x85a&\xFFV[\x90P_a\x0Fs\x82\x86\x86a 6V[\x90P\x82_\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x10\x13W\x85\x81`@Q\x7F3\xCA\x1F\xE3\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\x81R`\x04\x01a\x10\n\x92\x91\x90aB\xB2V[`@Q\x80\x91\x03\x90\xFD[`\x01\x83_\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_\x83`\x02\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x84\x81R` \x01\x90\x81R` \x01_ \x90P\x803\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x83`\x01\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x112WPa\x111\x81\x80T\x90Pa\"\xF0V[[\x15a\x11\xCCW`\x01\x84`\x01\x01_\x89\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x82\x84`\x04\x01_\x89\x81R` \x01\x90\x81R` \x01_ \x81\x90UP_\x84`\x07\x01_\x89\x81R` \x01\x90\x81R` \x01_ T\x90P\x7Fx\xB1y\x17m\x1F\x19\xD7\xC2\x8E\x80\x82=\xEB\xA2bM\xA2\xCA.\xC6K\x17\x01\xF3c*\x87\xC9\xAE\xDC\x92\x88\x82`@Qa\x11\xC2\x92\x91\x90aIrV[`@Q\x80\x91\x03\x90\xA1P[PPPPPPPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x12\"\x91\x90aA\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x12=W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x12a\x91\x90aB\x87V[a\x12\xA2W3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x12\x99\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[_a\x12\xABa\x1D\xD7V[\x90P_\x81`\x0B\x01_\x88\x81R` \x01\x90\x81R` \x01_ T\x90P_a\x12\xD1\x88\x83\x89\x89a'WV[\x90P_a\x12\xDF\x82\x87\x87a 6V[\x90P\x83_\x01_\x8A\x81R` \x01\x90\x81R` \x01_ _\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x13\x7FW\x88\x81`@Q\x7F\xFC\xF5\xA6\xE9\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\x81R`\x04\x01a\x13v\x92\x91\x90aB\xB2V[`@Q\x80\x91\x03\x90\xFD[`\x01\x84_\x01_\x8B\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_a\x13\xEF\x8A\x84a \x9BV[\x90P\x84`\x01\x01_\x8B\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x14$WPa\x14#\x81Qa\"\xF0V[[\x15a\x14\xD6W`\x01\x85`\x01\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x88\x88\x86`\x0C\x01_\x8D\x81R` \x01\x90\x81R` \x01_ \x91\x82a\x14v\x92\x91\x90aF-V[P\x82\x85`\x04\x01_\x8C\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x89\x85`\r\x01\x81\x90UP\x7F\"X\xB7?\xAE\xD3?\xB2\xE2\xEAED\x03\xBE\xF9t\x92\x0C\xAFh*\xB3\xA7#HO\xCFgU;\x16\xA2\x8A\x82\x8B\x8B`@Qa\x14\xCD\x94\x93\x92\x91\x90aI\xC5V[`@Q\x80\x91\x03\x90\xA1[PPPPPPPPPPV[_``\x80_\x80_``_a\x14\xF4a'\xDEV[\x90P_\x80\x1B\x81_\x01T\x14\x80\x15a\x15\x0FWP_\x80\x1B\x81`\x01\x01T\x14[a\x15NW`@Q\x7F\x08\xC3y\xA0\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\x81R`\x04\x01a\x15E\x90aJTV[`@Q\x80\x91\x03\x90\xFD[a\x15Va(\x05V[a\x15^a(\xA3V[F0_\x80\x1B_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x15}Wa\x15|a86V[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x15\xABW\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x7F\x0F\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\x95\x94\x93\x92\x91\x90\x97P\x97P\x97P\x97P\x97P\x97P\x97PP\x90\x91\x92\x93\x94\x95\x96V[``\x80_a\x15\xF7a\x1D\xD7V[\x90P\x80`\x01\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\x16ZW\x83`@Q\x7F\x84\xDE\x131\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\x81R`\x04\x01a\x16Q\x91\x90a?)V[`@Q\x80\x91\x03\x90\xFD[_\x81`\x04\x01_\x86\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x03\x01_\x86\x81R` \x01\x90\x81R` \x01_ _\x82\x81R` \x01\x90\x81R` \x01_ \x82`\x08\x01_\x87\x81R` \x01\x90\x81R` \x01_ \x81\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01_\x90[\x82\x82\x10\x15a\x17nW\x83\x82\x90_R` _ \x01\x80Ta\x16\xE3\x90aD`V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x17\x0F\x90aD`V[\x80\x15a\x17ZW\x80`\x1F\x10a\x171Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x17ZV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x17=W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81R` \x01\x90`\x01\x01\x90a\x16\xC6V[PPPP\x91P\x80\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01_\x90[\x82\x82\x10\x15a\x18\x8DW\x83\x82\x90_R` _ \x90`\x02\x02\x01`@Q\x80`@\x01`@R\x90\x81_\x82\x01_\x90T\x90a\x01\0\n\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x17\xD8Wa\x17\xD7a5\xD4V[[`\x01\x81\x11\x15a\x17\xEAWa\x17\xE9a5\xD4V[[\x81R` \x01`\x01\x82\x01\x80Ta\x17\xFE\x90aD`V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x18*\x90aD`V[\x80\x15a\x18uW\x80`\x1F\x10a\x18LWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x18uV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x18XW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x81R` \x01\x90`\x01\x01\x90a\x17\x94V[PPPP\x90P\x93P\x93PPP\x91P\x91V[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[_\x80a\x18\xE1a\x1D\xD7V[\x90P\x80`\r\x01T\x91PP\x90V[``\x80_a\x18\xFAa\x1D\xD7V[\x90P\x80`\x01\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\x19]W\x83`@Q\x7F\xDA2\xD0\x0F\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\x81R`\x04\x01a\x19T\x91\x90a?)V[`@Q\x80\x91\x03\x90\xFD[_\x81`\x04\x01_\x86\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x03\x01_\x86\x81R` \x01\x90\x81R` \x01_ _\x82\x81R` \x01\x90\x81R` \x01_ \x82`\x0C\x01_\x87\x81R` \x01\x90\x81R` \x01_ \x81\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01_\x90[\x82\x82\x10\x15a\x1AqW\x83\x82\x90_R` _ \x01\x80Ta\x19\xE6\x90aD`V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x1A\x12\x90aD`V[\x80\x15a\x1A]W\x80`\x1F\x10a\x1A4Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x1A]V[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x1A@W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81R` \x01\x90`\x01\x01\x90a\x19\xC9V[PPPP\x91P\x80\x80Ta\x1A\x83\x90aD`V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x1A\xAF\x90aD`V[\x80\x15a\x1A\xFAW\x80`\x1F\x10a\x1A\xD1Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x1A\xFAV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x1A\xDDW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x93P\x93PPP\x91P\x91V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1BiW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1B\x8D\x91\x90aAeV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x1B\xFCW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\x1B\xF3\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[_a\x1C\x05a\x1D\xD7V[\x90P\x80`\x05\x01_\x81T\x80\x92\x91\x90a\x1C\x1B\x90aA\xD6V[\x91\x90PUP_\x81`\x05\x01T\x90P\x81`\x06\x01_\x81T\x80\x92\x91\x90a\x1C<\x90aA\xD6V[\x91\x90PUP_\x82`\x06\x01T\x90P\x80\x83`\x07\x01_\x84\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x81\x83`\x07\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP_\x84\x84`\x0E\x01_\x85\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83`\x01\x81\x11\x15a\x1C\xAFWa\x1C\xAEa5\xD4V[[\x02\x17\x90UP\x7F\x02\x02@\x07\xD9et\xDB\xC9\xD1\x13(\xBF\xEE\x98\x93\xE7\xC7\xBBN\xF4\xAA\x80m\xF3;\xFD\xF4T\xEB^`\x83\x82\x87`@Qa\x1C\xE7\x93\x92\x91\x90aB\x1DV[`@Q\x80\x91\x03\x90\xA1PPPPPV[_\x80a\x1D\0a\x1D\xD7V[\x90P\x80`\t\x01T\x91PP\x90V[``_`\x01a\x1D\x1B\x84a)AV[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1D9Wa\x1D8a86V[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x1DkW\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a\x1D\xCCW\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a\x1D\xC1Wa\x1D\xC0aJrV[[\x04\x94P_\x85\x03a\x1DxW[\x81\x93PPPP\x91\x90PV[_\x7F\x0B\x8F\xDB\x1F\ncV\xDD \xA6\xCB\xC6\xF9f\x8F\xAC#\xB8_\x96W]\x10\xE33\xE6\x03\xFA\xA7\x94\xAC\0\x90P\x90V[_a\x1E\x07a\x1E\"V[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[a\x1EQa*\x92V[a\x1E[\x82\x82a*\xD2V[PPV[_\x80\x83\x83\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1E~Wa\x1E}a86V[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1E\xACW\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_[\x84\x84\x90P\x81\x10\x15a\x1F\xB0W`@Q\x80``\x01`@R\x80`%\x81R` \x01aQ\xB4`%\x919\x80Q\x90` \x01 \x85\x85\x83\x81\x81\x10a\x1E\xEFWa\x1E\xEEaB\xD9V[[\x90P` \x02\x81\x01\x90a\x1F\x01\x91\x90aC\x12V[_\x01` \x81\x01\x90a\x1F\x12\x91\x90aJ\x9FV[\x86\x86\x84\x81\x81\x10a\x1F%Wa\x1F$aB\xD9V[[\x90P` \x02\x81\x01\x90a\x1F7\x91\x90aC\x12V[\x80` \x01\x90a\x1FF\x91\x90aC\xC7V[`@Qa\x1FT\x92\x91\x90aJ\xF8V[`@Q\x80\x91\x03\x90 `@Q` \x01a\x1Fn\x93\x92\x91\x90aK\x1FV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x82\x82\x81Q\x81\x10a\x1F\x97Wa\x1F\x96aB\xD9V[[` \x02` \x01\x01\x81\x81RPP\x80\x80`\x01\x01\x91PPa\x1E\xB1V[Pa +`@Q\x80`\xA0\x01`@R\x80`r\x81R` \x01aQB`r\x919\x80Q\x90` \x01 \x87\x87\x84`@Q` \x01a\x1F\xE7\x91\x90aL\x05V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a \x10\x94\x93\x92\x91\x90aL\x1BV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a+#V[\x91PP\x94\x93PPPPV[_\x80a \x85\x85\x85\x85\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847_\x81\x84\x01R`\x1F\x19`\x1F\x82\x01\x16\x90P\x80\x83\x01\x92PPPPPPPa+=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a!8\x91\x90aM\xB1V[``\x01Q\x90P_\x82`\x02\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x86\x81R` \x01\x90\x81R` \x01_ \x90P\x803\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP_\x83`\x03\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x87\x81R` \x01\x90\x81R` \x01_ \x90P\x80\x83\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91P\x90\x81a\"\x17\x91\x90aNPV[P\x80\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01_\x90[\x82\x82\x10\x15a\"\xE0W\x83\x82\x90_R` _ \x01\x80Ta\"U\x90aD`V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\"\x81\x90aD`V[\x80\x15a\"\xCCW\x80`\x1F\x10a\"\xA3Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\"\xCCV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\"\xAFW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81R` \x01\x90`\x01\x01\x90a\"8V[PPPP\x94PPPPP\x92\x91PPV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xB4r+\xC4`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a#OW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a#s\x91\x90aO3V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a$.WP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a$\x15a,6V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a$eW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a$\xC4W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a$\xE8\x91\x90aAeV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a%WW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a%N\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a%\xC2WP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a%\xBF\x91\x90aO\x88V[`\x01[a&\x03W\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a%\xFA\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a&iW\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a&`\x91\x90a9\xCCV[`@Q\x80\x91\x03\x90\xFD[a&s\x83\x83a,\x89V[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a&\xFDW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_a'P`@Q\x80``\x01`@R\x80`,\x81R` \x01aQ\x16`,\x919\x80Q\x90` \x01 \x83`@Q` \x01a'5\x92\x91\x90aO\xB3V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a+#V[\x90P\x91\x90PV[_a'\xD4`@Q\x80`\x80\x01`@R\x80`F\x81R` \x01aP\xD0`F\x919\x80Q\x90` \x01 \x86\x86\x86\x86`@Q` \x01a'\x90\x92\x91\x90aJ\xF8V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a'\xB9\x94\x93\x92\x91\x90aL\x1BV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a+#V[\x90P\x94\x93PPPPV[_\x7F\xA1jF\xD9Ba\xC7Q|\xC8\xFF\x89\xF6\x1C\x0C\xE95\x98\xE3\xC8I\x80\x10\x11\xDE\xE6I\xA6\xA5W\xD1\0\x90P\x90V[``_a(\x10a'\xDEV[\x90P\x80`\x02\x01\x80Ta(!\x90aD`V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta(M\x90aD`V[\x80\x15a(\x98W\x80`\x1F\x10a(oWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a(\x98V[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a({W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[``_a(\xAEa'\xDEV[\x90P\x80`\x03\x01\x80Ta(\xBF\x90aD`V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta(\xEB\x90aD`V[\x80\x15a)6W\x80`\x1F\x10a)\rWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a)6V[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a)\x19W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a)\x9DWz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a)\x93Wa)\x92aJrV[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a)\xDAWm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a)\xD0Wa)\xCFaJrV[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a*\tWf#\x86\xF2o\xC1\0\0\x83\x81a)\xFFWa)\xFEaJrV[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a*2Wc\x05\xF5\xE1\0\x83\x81a*(Wa*'aJrV[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a*WWa'\x10\x83\x81a*MWa*LaJrV[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a*zW`d\x83\x81a*pWa*oaJrV[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a*\x89W`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[a*\x9Aa,\xFBV[a*\xD0W`@Q\x7F\xD7\xE6\xBC\xF8\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[a*\xDAa*\x92V[_a*\xE3a'\xDEV[\x90P\x82\x81`\x02\x01\x90\x81a*\xF6\x91\x90aNPV[P\x81\x81`\x03\x01\x90\x81a+\x08\x91\x90aNPV[P_\x80\x1B\x81_\x01\x81\x90UP_\x80\x1B\x81`\x01\x01\x81\x90UPPPPV[_a+5a+/a-\x19V[\x83a-'V[\x90P\x91\x90PV[_\x80_\x80a+J\x86\x86a-gV[\x92P\x92P\x92Pa+Z\x82\x82a-\xBCV[\x82\x93PPPP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c =\x01\x14\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a+\xB3\x91\x90aA\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a+\xCEW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a+\xF2\x91\x90aB\x87V[a,3W\x80`@Q\x7F*|n\xF6\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\x81R`\x04\x01a,*\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[PV[_a,b\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba/\x1EV[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a,\x92\x82a/'V[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a,\xEEWa,\xE8\x82\x82a/\xF0V[Pa,\xF7V[a,\xF6a0pV[[PPV[_a-\x04a\x1E\"V[_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x90P\x90V[_a-\"a0\xACV[\x90P\x90V[_`@Q\x7F\x19\x01\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\x81R\x83`\x02\x82\x01R\x82`\"\x82\x01R`B\x81 \x91PP\x92\x91PPV[_\x80_`A\x84Q\x03a-\xA7W_\x80_` \x87\x01Q\x92P`@\x87\x01Q\x91P``\x87\x01Q_\x1A\x90Pa-\x99\x88\x82\x85\x85a1\x0FV[\x95P\x95P\x95PPPPa-\xB5V[_`\x02\x85Q_\x1B\x92P\x92P\x92P[\x92P\x92P\x92V[_`\x03\x81\x11\x15a-\xCFWa-\xCEa5\xD4V[[\x82`\x03\x81\x11\x15a-\xE2Wa-\xE1a5\xD4V[[\x03\x15a/\x1AW`\x01`\x03\x81\x11\x15a-\xFCWa-\xFBa5\xD4V[[\x82`\x03\x81\x11\x15a.\x0FWa.\x0Ea5\xD4V[[\x03a.FW`@Q\x7F\xF6E\xEE\xDF\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02`\x03\x81\x11\x15a.ZWa.Ya5\xD4V[[\x82`\x03\x81\x11\x15a.mWa.la5\xD4V[[\x03a.\xB1W\x80_\x1C`@Q\x7F\xFC\xE6\x98\xF7\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\x81R`\x04\x01a.\xA8\x91\x90a?)V[`@Q\x80\x91\x03\x90\xFD[`\x03\x80\x81\x11\x15a.\xC4Wa.\xC3a5\xD4V[[\x82`\x03\x81\x11\x15a.\xD7Wa.\xD6a5\xD4V[[\x03a/\x19W\x80`@Q\x7F\xD7\x8B\xCE\x0C\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\x81R`\x04\x01a/\x10\x91\x90a9\xCCV[`@Q\x80\x91\x03\x90\xFD[[PPV[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a/\x82W\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a/y\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[\x80a/\xAE\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba/\x1EV[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa0\x19\x91\x90aP\nV[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a0QW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a0VV[``\x91P[P\x91P\x91Pa0f\x85\x83\x83a1\xF6V[\x92PPP\x92\x91PPV[_4\x11\x15a0\xAAW`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0Fa0\xD6a2\x83V[a0\xDEa2\xF9V[F0`@Q` \x01a0\xF4\x95\x94\x93\x92\x91\x90aP V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x90V[_\x80_\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF]WnsW\xA4P\x1D\xDF\xE9/Fh\x1B \xA0\x84_\x1C\x11\x15a1KW_`\x03\x85\x92P\x92P\x92Pa1\xECV[_`\x01\x88\x88\x88\x88`@Q_\x81R` \x01`@R`@Qa1n\x94\x93\x92\x91\x90aP\x8CV[` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a1\x8EW=_\x80>=_\xFD[PPP` `@Q\x03Q\x90P_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x03a1\xDFW_`\x01_\x80\x1B\x93P\x93P\x93PPa1\xECV[\x80_\x80_\x1B\x93P\x93P\x93PP[\x94P\x94P\x94\x91PPV[``\x82a2\x0BWa2\x06\x82a3pV[a2{V[_\x82Q\x14\x80\x15a21WP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a2sW\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a2j\x91\x90aA\x90V[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa2|V[[\x93\x92PPPV[_\x80a2\x8Da'\xDEV[\x90P_a2\x98a(\x05V[\x90P_\x81Q\x11\x15a2\xB4W\x80\x80Q\x90` \x01 \x92PPPa2\xF6V[_\x82_\x01T\x90P_\x80\x1B\x81\x14a2\xCFW\x80\x93PPPPa2\xF6V[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x80a3\x03a'\xDEV[\x90P_a3\x0Ea(\xA3V[\x90P_\x81Q\x11\x15a3*W\x80\x80Q\x90` \x01 \x92PPPa3mV[_\x82`\x01\x01T\x90P_\x80\x1B\x81\x14a3FW\x80\x93PPPPa3mV[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x81Q\x11\x15a3\x82W\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15a3\xEBW\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa3\xD0V[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a4\x10\x82a3\xB4V[a4\x1A\x81\x85a3\xBEV[\x93Pa4*\x81\x85` \x86\x01a3\xCEV[a43\x81a3\xF6V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra4V\x81\x84a4\x06V[\x90P\x92\x91PPV[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[a4\x81\x81a4oV[\x81\x14a4\x8BW_\x80\xFD[PV[_\x815\x90Pa4\x9C\x81a4xV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a4\xB7Wa4\xB6a4gV[[_a4\xC4\x84\x82\x85\x01a4\x8EV[\x91PP\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a5\x1F\x82a4\xF6V[\x90P\x91\x90PV[a5/\x81a5\x15V[\x82RPPV[_a5@\x83\x83a5&V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a5b\x82a4\xCDV[a5l\x81\x85a4\xD7V[\x93Pa5w\x83a4\xE7V[\x80_[\x83\x81\x10\x15a5\xA7W\x81Qa5\x8E\x88\x82a55V[\x97Pa5\x99\x83a5LV[\x92PP`\x01\x81\x01\x90Pa5zV[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra5\xCC\x81\x84a5XV[\x90P\x92\x91PPV[\x7FNH{q\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_R`!`\x04R`$_\xFD[`\x02\x81\x10a6\x12Wa6\x11a5\xD4V[[PV[_\x81\x90Pa6\"\x82a6\x01V[\x91\x90PV[_a61\x82a6\x15V[\x90P\x91\x90PV[a6A\x81a6'V[\x82RPPV[_` \x82\x01\x90Pa6Z_\x83\x01\x84a68V[\x92\x91PPV[`\x02\x81\x10a6lW_\x80\xFD[PV[_\x815\x90Pa6}\x81a6`V[\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a6\x99Wa6\x98a4gV[[_a6\xA6\x85\x82\x86\x01a4\x8EV[\x92PP` a6\xB7\x85\x82\x86\x01a6oV[\x91PP\x92P\x92\x90PV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12a6\xE2Wa6\xE1a6\xC1V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a6\xFFWa6\xFEa6\xC5V[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15a7\x1BWa7\x1Aa6\xC9V[[\x92P\x92\x90PV[_\x80\x83`\x1F\x84\x01\x12a77Wa76a6\xC1V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a7TWa7Sa6\xC5V[[` \x83\x01\x91P\x83`\x01\x82\x02\x83\x01\x11\x15a7pWa7oa6\xC9V[[\x92P\x92\x90PV[_\x80_\x80_``\x86\x88\x03\x12\x15a7\x90Wa7\x8Fa4gV[[_a7\x9D\x88\x82\x89\x01a4\x8EV[\x95PP` \x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a7\xBEWa7\xBDa4kV[[a7\xCA\x88\x82\x89\x01a6\xCDV[\x94P\x94PP`@\x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a7\xEDWa7\xECa4kV[[a7\xF9\x88\x82\x89\x01a7\"V[\x92P\x92PP\x92\x95P\x92\x95\x90\x93PV[a8\x11\x81a5\x15V[\x81\x14a8\x1BW_\x80\xFD[PV[_\x815\x90Pa8,\x81a8\x08V[\x92\x91PPV[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[a8l\x82a3\xF6V[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a8\x8BWa8\x8Aa86V[[\x80`@RPPPV[_a8\x9Da4^V[\x90Pa8\xA9\x82\x82a8cV[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a8\xC8Wa8\xC7a86V[[a8\xD1\x82a3\xF6V[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_a8\xFEa8\xF9\x84a8\xAEV[a8\x94V[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15a9\x1AWa9\x19a82V[[a9%\x84\x82\x85a8\xDEV[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12a9AWa9@a6\xC1V[[\x815a9Q\x84\x82` \x86\x01a8\xECV[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a9pWa9oa4gV[[_a9}\x85\x82\x86\x01a8\x1EV[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a9\x9EWa9\x9Da4kV[[a9\xAA\x85\x82\x86\x01a9-V[\x91PP\x92P\x92\x90PV[_\x81\x90P\x91\x90PV[a9\xC6\x81a9\xB4V[\x82RPPV[_` \x82\x01\x90Pa9\xDF_\x83\x01\x84a9\xBDV[\x92\x91PPV[_\x80_`@\x84\x86\x03\x12\x15a9\xFCWa9\xFBa4gV[[_a:\t\x86\x82\x87\x01a4\x8EV[\x93PP` \x84\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a:*Wa:)a4kV[[a:6\x86\x82\x87\x01a7\"V[\x92P\x92PP\x92P\x92P\x92V[_\x80_\x80_``\x86\x88\x03\x12\x15a:[Wa:Za4gV[[_a:h\x88\x82\x89\x01a4\x8EV[\x95PP` \x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a:\x89Wa:\x88a4kV[[a:\x95\x88\x82\x89\x01a7\"V[\x94P\x94PP`@\x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a:\xB8Wa:\xB7a4kV[[a:\xC4\x88\x82\x89\x01a7\"V[\x92P\x92PP\x92\x95P\x92\x95\x90\x93PV[_\x7F\xFF\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\x82\x16\x90P\x91\x90PV[a;\x07\x81a:\xD3V[\x82RPPV[a;\x16\x81a4oV[\x82RPPV[a;%\x81a5\x15V[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a;]\x81a4oV[\x82RPPV[_a;n\x83\x83a;TV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a;\x90\x82a;+V[a;\x9A\x81\x85a;5V[\x93Pa;\xA5\x83a;EV[\x80_[\x83\x81\x10\x15a;\xD5W\x81Qa;\xBC\x88\x82a;cV[\x97Pa;\xC7\x83a;zV[\x92PP`\x01\x81\x01\x90Pa;\xA8V[P\x85\x93PPPP\x92\x91PPV[_`\xE0\x82\x01\x90Pa;\xF5_\x83\x01\x8Aa:\xFEV[\x81\x81\x03` \x83\x01Ra<\x07\x81\x89a4\x06V[\x90P\x81\x81\x03`@\x83\x01Ra<\x1B\x81\x88a4\x06V[\x90Pa<*``\x83\x01\x87a;\rV[a<7`\x80\x83\x01\x86a;\x1CV[a\x04\x81\x85a=\xE0V[\x93Pa>\x14\x81\x85` \x86\x01a3\xCEV[a>\x1D\x81a3\xF6V[\x84\x01\x91PP\x92\x91PPV[_`@\x83\x01_\x83\x01Qa>=_\x86\x01\x82a=\xC7V[P` \x83\x01Q\x84\x82\x03` \x86\x01Ra>U\x82\x82a=\xF0V[\x91PP\x80\x91PP\x92\x91PPV[_a>m\x83\x83a>(V[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a>\x8B\x82a=gV[a>\x95\x81\x85a=qV[\x93P\x83` \x82\x02\x85\x01a>\xA7\x85a=\x81V[\x80_[\x85\x81\x10\x15a>\xE2W\x84\x84\x03\x89R\x81Qa>\xC3\x85\x82a>bV[\x94Pa>\xCE\x83a>uV[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90Pa>\xAAV[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_`@\x82\x01\x90P\x81\x81\x03_\x83\x01Ra?\x0C\x81\x85a<\xF4V[\x90P\x81\x81\x03` \x83\x01Ra? \x81\x84a>\x81V[\x90P\x93\x92PPPV[_` \x82\x01\x90Pa?<_\x83\x01\x84a;\rV[\x92\x91PPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_a?\\\x82a=\xD6V[a?f\x81\x85a?BV[\x93Pa?v\x81\x85` \x86\x01a3\xCEV[a?\x7F\x81a3\xF6V[\x84\x01\x91PP\x92\x91PPV[_`@\x82\x01\x90P\x81\x81\x03_\x83\x01Ra?\xA2\x81\x85a<\xF4V[\x90P\x81\x81\x03` \x83\x01Ra?\xB6\x81\x84a?RV[\x90P\x93\x92PPPV[_` \x82\x84\x03\x12\x15a?\xD4Wa?\xD3a4gV[[_a?\xE1\x84\x82\x85\x01a6oV[\x91PP\x92\x91PPV[_\x81\x90P\x92\x91PPV[_a?\xFE\x82a3\xB4V[a@\x08\x81\x85a?\xEAV[\x93Pa@\x18\x81\x85` \x86\x01a3\xCEV[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_a@X`\x02\x83a?\xEAV[\x91Pa@c\x82a@$V[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_a@\xA2`\x01\x83a?\xEAV[\x91Pa@\xAD\x82a@nV[`\x01\x82\x01\x90P\x91\x90PV[_a@\xC3\x82\x87a?\xF4V[\x91Pa@\xCE\x82a@LV[\x91Pa@\xDA\x82\x86a?\xF4V[\x91Pa@\xE5\x82a@\x96V[\x91Pa@\xF1\x82\x85a?\xF4V[\x91Pa@\xFC\x82a@\x96V[\x91PaA\x08\x82\x84a?\xF4V[\x91P\x81\x90P\x95\x94PPPPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[aA2\x81aA\x16V[\x82RPPV[_` \x82\x01\x90PaAK_\x83\x01\x84aA)V[\x92\x91PPV[_\x81Q\x90PaA_\x81a8\x08V[\x92\x91PPV[_` \x82\x84\x03\x12\x15aAzWaAya4gV[[_aA\x87\x84\x82\x85\x01aAQV[\x91PP\x92\x91PPV[_` \x82\x01\x90PaA\xA3_\x83\x01\x84a;\x1CV[\x92\x91PPV[\x7FNH{q\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_R`\x11`\x04R`$_\xFD[_aA\xE0\x82a4oV[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03aB\x12WaB\x11aA\xA9V[[`\x01\x82\x01\x90P\x91\x90PV[_``\x82\x01\x90PaB0_\x83\x01\x86a;\rV[aB=` \x83\x01\x85a;\rV[aBJ`@\x83\x01\x84a68V[\x94\x93PPPPV[_\x81\x15\x15\x90P\x91\x90PV[aBf\x81aBRV[\x81\x14aBpW_\x80\xFD[PV[_\x81Q\x90PaB\x81\x81aB]V[\x92\x91PPV[_` \x82\x84\x03\x12\x15aB\x9CWaB\x9Ba4gV[[_aB\xA9\x84\x82\x85\x01aBsV[\x91PP\x92\x91PPV[_`@\x82\x01\x90PaB\xC5_\x83\x01\x85a;\rV[aB\xD2` \x83\x01\x84a;\x1CV[\x93\x92PPPV[\x7FNH{q\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_R`2`\x04R`$_\xFD[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x825`\x01`@\x03\x836\x03\x03\x81\x12aC-WaC,aC\x06V[[\x80\x83\x01\x91PP\x92\x91PPV[`\x02\x81\x10aCEW_\x80\xFD[PV[_\x815aCT\x81aC9V[\x80\x91PP\x91\x90PV[_\x81_\x1B\x90P\x91\x90PV[_`\xFFaCt\x84aC]V[\x93P\x80\x19\x83\x16\x92P\x80\x84\x16\x83\x17\x91PP\x92\x91PPV[_aC\x94\x82a=\xA4V[\x90P\x91\x90PV[_\x81\x90P\x91\x90PV[aC\xAD\x82aC\x8AV[aC\xC0aC\xB9\x82aC\x9BV[\x83TaChV[\x82UPPPV[_\x80\x835`\x01` \x03\x846\x03\x03\x81\x12aC\xE3WaC\xE2aC\x06V[[\x80\x84\x01\x92P\x825\x91Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aD\x05WaD\x04aC\nV[[` \x83\x01\x92P`\x01\x82\x026\x03\x83\x13\x15aD!WaD aC\x0EV[[P\x92P\x92\x90PV[_\x82\x90P\x92\x91PPV[\x7FNH{q\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_R`\"`\x04R`$_\xFD[_`\x02\x82\x04\x90P`\x01\x82\x16\x80aDwW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03aD\x8AWaD\x89aD3V[[P\x91\x90PV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_` `\x1F\x83\x01\x04\x90P\x91\x90PV[_\x82\x82\x1B\x90P\x92\x91PPV[_`\x08\x83\x02aD\xEC\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82aD\xB1V[aD\xF6\x86\x83aD\xB1V[\x95P\x80\x19\x84\x16\x93P\x80\x86\x16\x84\x17\x92PPP\x93\x92PPPV[_\x81\x90P\x91\x90PV[_aE1aE,aE'\x84a4oV[aE\x0EV[a4oV[\x90P\x91\x90PV[_\x81\x90P\x91\x90PV[aEJ\x83aE\x17V[aE^aEV\x82aE8V[\x84\x84TaD\xBDV[\x82UPPPPV[_\x90V[aEraEfV[aE}\x81\x84\x84aEAV[PPPV[[\x81\x81\x10\x15aE\xA0WaE\x95_\x82aEjV[`\x01\x81\x01\x90PaE\x83V[PPV[`\x1F\x82\x11\x15aE\xE5WaE\xB6\x81aD\x90V[aE\xBF\x84aD\xA2V[\x81\x01` \x85\x10\x15aE\xCEW\x81\x90P[aE\xE2aE\xDA\x85aD\xA2V[\x83\x01\x82aE\x82V[PP[PPPV[_\x82\x82\x1C\x90P\x92\x91PPV[_aF\x05_\x19\x84`\x08\x02aE\xEAV[\x19\x80\x83\x16\x91PP\x92\x91PPV[_aF\x1D\x83\x83aE\xF6V[\x91P\x82`\x02\x02\x82\x17\x90P\x92\x91PPV[aF7\x83\x83aD)V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aFPWaFOa86V[[aFZ\x82TaD`V[aFe\x82\x82\x85aE\xA4V[_`\x1F\x83\x11`\x01\x81\x14aF\x92W_\x84\x15aF\x80W\x82\x87\x015\x90P[aF\x8A\x85\x82aF\x12V[\x86UPaF\xF1V[`\x1F\x19\x84\x16aF\xA0\x86aD\x90V[_[\x82\x81\x10\x15aF\xC7W\x84\x89\x015\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90PaF\xA2V[\x86\x83\x10\x15aF\xE4W\x84\x89\x015aF\xE0`\x1F\x89\x16\x82aE\xF6V[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPPV[aG\x05\x83\x83\x83aF-V[PPPV[_\x81\x01_\x83\x01\x80aG\x1A\x81aCHV[\x90PaG&\x81\x84aC\xA4V[PPP`\x01\x81\x01` \x83\x01aG;\x81\x85aC\xC7V[aGF\x81\x83\x86aF\xFAV[PPPPPPV[aGX\x82\x82aG\nV[PPV[_\x81\x90P\x91\x90PV[_\x815\x90PaGs\x81aC9V[\x92\x91PPV[_aG\x87` \x84\x01\x84aGeV[\x90P\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x835`\x01` \x03\x846\x03\x03\x81\x12aG\xB7WaG\xB6aG\x97V[[\x83\x81\x01\x92P\x825\x91P` \x83\x01\x92Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aG\xDFWaG\xDEaG\x8FV[[`\x01\x82\x026\x03\x83\x13\x15aG\xF5WaG\xF4aG\x93V[[P\x92P\x92\x90PV[_aH\x08\x83\x85a=\xE0V[\x93PaH\x15\x83\x85\x84a8\xDEV[aH\x1E\x83a3\xF6V[\x84\x01\x90P\x93\x92PPPV[_`@\x83\x01aH:_\x84\x01\x84aGyV[aHF_\x86\x01\x82a=\xC7V[PaHT` \x84\x01\x84aG\x9BV[\x85\x83\x03` \x87\x01RaHg\x83\x82\x84aG\xFDV[\x92PPP\x80\x91PP\x92\x91PPV[_aH\x80\x83\x83aH)V[\x90P\x92\x91PPV[_\x825`\x01`@\x03\x836\x03\x03\x81\x12aH\xA3WaH\xA2aG\x97V[[\x82\x81\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aH\xC6\x83\x85a=qV[\x93P\x83` \x84\x02\x85\x01aH\xD8\x84aG\\V[\x80_[\x87\x81\x10\x15aI\x1BW\x84\x84\x03\x89RaH\xF2\x82\x84aH\x88V[aH\xFC\x85\x82aHuV[\x94PaI\x07\x83aH\xAFV[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90PaH\xDBV[P\x82\x97P\x87\x94PPPPP\x93\x92PPPV[_``\x82\x01\x90PaI@_\x83\x01\x87a;\rV[\x81\x81\x03` \x83\x01RaIR\x81\x86a<\xF4V[\x90P\x81\x81\x03`@\x83\x01RaIg\x81\x84\x86aH\xBBV[\x90P\x95\x94PPPPPV[_`@\x82\x01\x90PaI\x85_\x83\x01\x85a;\rV[aI\x92` \x83\x01\x84a;\rV[\x93\x92PPPV[_aI\xA4\x83\x85a?BV[\x93PaI\xB1\x83\x85\x84a8\xDEV[aI\xBA\x83a3\xF6V[\x84\x01\x90P\x93\x92PPPV[_``\x82\x01\x90PaI\xD8_\x83\x01\x87a;\rV[\x81\x81\x03` \x83\x01RaI\xEA\x81\x86a<\xF4V[\x90P\x81\x81\x03`@\x83\x01RaI\xFF\x81\x84\x86aI\x99V[\x90P\x95\x94PPPPPV[\x7FEIP712: Uninitialized\0\0\0\0\0\0\0\0\0\0\0_\x82\x01RPV[_aJ>`\x15\x83a3\xBEV[\x91PaJI\x82aJ\nV[` \x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01RaJk\x81aJ2V[\x90P\x91\x90PV[\x7FNH{q\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_R`\x12`\x04R`$_\xFD[_` \x82\x84\x03\x12\x15aJ\xB4WaJ\xB3a4gV[[_aJ\xC1\x84\x82\x85\x01aGeV[\x91PP\x92\x91PPV[_\x81\x90P\x92\x91PPV[_aJ\xDF\x83\x85aJ\xCAV[\x93PaJ\xEC\x83\x85\x84a8\xDEV[\x82\x84\x01\x90P\x93\x92PPPV[_aK\x04\x82\x84\x86aJ\xD4V[\x91P\x81\x90P\x93\x92PPPV[aK\x19\x81a=\xB6V[\x82RPPV[_``\x82\x01\x90PaK2_\x83\x01\x86a9\xBDV[aK?` \x83\x01\x85aK\x10V[aKL`@\x83\x01\x84a9\xBDV[\x94\x93PPPPV[_\x81Q\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[aK\x80\x81a9\xB4V[\x82RPPV[_aK\x91\x83\x83aKwV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aK\xB3\x82aKTV[aK\xBD\x81\x85aK^V[\x93PaK\xC8\x83aKhV[\x80_[\x83\x81\x10\x15aK\xF8W\x81QaK\xDF\x88\x82aK\x86V[\x97PaK\xEA\x83aK\x9DV[\x92PP`\x01\x81\x01\x90PaK\xCBV[P\x85\x93PPPP\x92\x91PPV[_aL\x10\x82\x84aK\xA9V[\x91P\x81\x90P\x92\x91PPV[_`\x80\x82\x01\x90PaL._\x83\x01\x87a9\xBDV[aL;` \x83\x01\x86a;\rV[aLH`@\x83\x01\x85a;\rV[aLU``\x83\x01\x84a9\xBDV[\x95\x94PPPPPV[_\x80\xFD[_\x80\xFD[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aL\x80WaL\x7Fa86V[[aL\x89\x82a3\xF6V[\x90P` \x81\x01\x90P\x91\x90PV[_aL\xA8aL\xA3\x84aLfV[a8\x94V[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15aL\xC4WaL\xC3a82V[[aL\xCF\x84\x82\x85a3\xCEV[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12aL\xEBWaL\xEAa6\xC1V[[\x81QaL\xFB\x84\x82` \x86\x01aL\x96V[\x91PP\x92\x91PPV[_`\x80\x82\x84\x03\x12\x15aM\x19WaM\x18aL^V[[aM#`\x80a8\x94V[\x90P_aM2\x84\x82\x85\x01aAQV[_\x83\x01RP` aME\x84\x82\x85\x01aAQV[` \x83\x01RP`@\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aMiWaMhaLbV[[aMu\x84\x82\x85\x01aL\xD7V[`@\x83\x01RP``\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aM\x99WaM\x98aLbV[[aM\xA5\x84\x82\x85\x01aL\xD7V[``\x83\x01RP\x92\x91PPV[_` \x82\x84\x03\x12\x15aM\xC6WaM\xC5a4gV[[_\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aM\xE3WaM\xE2a4kV[[aM\xEF\x84\x82\x85\x01aM\x04V[\x91PP\x92\x91PPV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[`\x1F\x82\x11\x15aNKWaN\x1C\x81aM\xF8V[aN%\x84aD\xA2V[\x81\x01` \x85\x10\x15aN4W\x81\x90P[aNHaN@\x85aD\xA2V[\x83\x01\x82aE\x82V[PP[PPPV[aNY\x82a3\xB4V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aNrWaNqa86V[[aN|\x82TaD`V[aN\x87\x82\x82\x85aN\nV[_` \x90P`\x1F\x83\x11`\x01\x81\x14aN\xB8W_\x84\x15aN\xA6W\x82\x87\x01Q\x90P[aN\xB0\x85\x82aF\x12V[\x86UPaO\x17V[`\x1F\x19\x84\x16aN\xC6\x86aM\xF8V[_[\x82\x81\x10\x15aN\xEDW\x84\x89\x01Q\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90PaN\xC8V[\x86\x83\x10\x15aO\nW\x84\x89\x01QaO\x06`\x1F\x89\x16\x82aE\xF6V[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPV[_\x81Q\x90PaO-\x81a4xV[\x92\x91PPV[_` \x82\x84\x03\x12\x15aOHWaOGa4gV[[_aOU\x84\x82\x85\x01aO\x1FV[\x91PP\x92\x91PPV[aOg\x81a9\xB4V[\x81\x14aOqW_\x80\xFD[PV[_\x81Q\x90PaO\x82\x81aO^V[\x92\x91PPV[_` \x82\x84\x03\x12\x15aO\x9DWaO\x9Ca4gV[[_aO\xAA\x84\x82\x85\x01aOtV[\x91PP\x92\x91PPV[_`@\x82\x01\x90PaO\xC6_\x83\x01\x85a9\xBDV[aO\xD3` \x83\x01\x84a;\rV[\x93\x92PPPV[_aO\xE4\x82a=\xD6V[aO\xEE\x81\x85aJ\xCAV[\x93PaO\xFE\x81\x85` \x86\x01a3\xCEV[\x80\x84\x01\x91PP\x92\x91PPV[_aP\x15\x82\x84aO\xDAV[\x91P\x81\x90P\x92\x91PPV[_`\xA0\x82\x01\x90PaP3_\x83\x01\x88a9\xBDV[aP@` \x83\x01\x87a9\xBDV[aPM`@\x83\x01\x86a9\xBDV[aPZ``\x83\x01\x85a;\rV[aPg`\x80\x83\x01\x84a;\x1CV[\x96\x95PPPPPPV[_`\xFF\x82\x16\x90P\x91\x90PV[aP\x86\x81aPqV[\x82RPPV[_`\x80\x82\x01\x90PaP\x9F_\x83\x01\x87a9\xBDV[aP\xAC` \x83\x01\x86aP}V[aP\xB9`@\x83\x01\x85a9\xBDV[aP\xC6``\x83\x01\x84a9\xBDV[\x95\x94PPPPPV\xFECrsgenVerification(uint256 crsId,uint256 maxBitLength,bytes crsDigest)PrepKeygenVerification(uint256 prepKeygenId)KeygenVerification(uint256 prepKeygenId,uint256 keyId,KeyDigest[] keyDigests)KeyDigest(uint8 keyType,bytes digest)KeyDigest(uint8 keyType,bytes digest)", + b"`\x80`@R`\x046\x10a\x01\x08W_5`\xE0\x1C\x80cX\x9A\xDB\x0E\x11a\0\x94W\x80c\xAD<\xB1\xCC\x11a\0cW\x80c\xAD<\xB1\xCC\x14a\x03SW\x80c\xBA\xFF!\x1E\x14a\x03}W\x80c\xC5[\x87$\x14a\x03\xA7W\x80c\xCA\xA3g\xDB\x14a\x03\xE4W\x80c\xD5/\x10\xEB\x14a\x04\x0CWa\x01\x08V[\x80cX\x9A\xDB\x0E\x14a\x02\x96W\x80cb\x97\x87\x87\x14a\x02\xBEW\x80c\x84\xB0\x19n\x14a\x02\xE6W\x80c\x93f\x08\xAE\x14a\x03\x16Wa\x01\x08V[\x80c<\x02\xF84\x11a\0\xDBW\x80c<\x02\xF84\x14a\x01\xC4W\x80cE\xAF&\x1B\x14a\x01\xECW\x80cF\x10\xFF\xE8\x14a\x02(W\x80cO\x1E\xF2\x86\x14a\x02PW\x80cR\xD1\x90-\x14a\x02lWa\x01\x08V[\x80c\r\x8En,\x14a\x01\x0CW\x80c\x16\xC7\x13\xD9\x14a\x016W\x80c\x19\xF4\xF62\x14a\x01rW\x80c9\xF78\x10\x14a\x01\xAEW[_\x80\xFD[4\x80\x15a\x01\x17W_\x80\xFD[Pa\x01 a\x046V[`@Qa\x01-\x91\x90a7yV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01AW_\x80\xFD[Pa\x01\\`\x04\x806\x03\x81\x01\x90a\x01W\x91\x90a7\xDDV[a\x04\xB1V[`@Qa\x01i\x91\x90a8\xEFV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01}W_\x80\xFD[Pa\x01\x98`\x04\x806\x03\x81\x01\x90a\x01\x93\x91\x90a7\xDDV[a\x05\x82V[`@Qa\x01\xA5\x91\x90a9\x82V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xB9W_\x80\xFD[Pa\x01\xC2a\x06/V[\0[4\x80\x15a\x01\xCFW_\x80\xFD[Pa\x01\xEA`\x04\x806\x03\x81\x01\x90a\x01\xE5\x91\x90a9\xBEV[a\x08~V[\0[4\x80\x15a\x01\xF7W_\x80\xFD[Pa\x02\x12`\x04\x806\x03\x81\x01\x90a\x02\r\x91\x90a7\xDDV[a\n-V[`@Qa\x02\x1F\x91\x90a9\x82V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x023W_\x80\xFD[Pa\x02N`\x04\x806\x03\x81\x01\x90a\x02I\x91\x90a:\xB2V[a\n\xC2V[\0[a\x02j`\x04\x806\x03\x81\x01\x90a\x02e\x91\x90a<\x95V[a\x10\x07V[\0[4\x80\x15a\x02wW_\x80\xFD[Pa\x02\x80a\x10&V[`@Qa\x02\x8D\x91\x90a=\x07V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\xA1W_\x80\xFD[Pa\x02\xBC`\x04\x806\x03\x81\x01\x90a\x02\xB7\x91\x90a= V[a\x10WV[\0[4\x80\x15a\x02\xC9W_\x80\xFD[Pa\x02\xE4`\x04\x806\x03\x81\x01\x90a\x02\xDF\x91\x90a=}V[a\x13\xA9V[\0[4\x80\x15a\x02\xF1W_\x80\xFD[Pa\x02\xFAa\x18\x8AV[`@Qa\x03\r\x97\x96\x95\x94\x93\x92\x91\x90a?\x1DV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03!W_\x80\xFD[Pa\x03<`\x04\x806\x03\x81\x01\x90a\x037\x91\x90a7\xDDV[a\x19\x93V[`@Qa\x03J\x92\x91\x90aB/V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03^W_\x80\xFD[Pa\x03ga\x1D:V[`@Qa\x03t\x91\x90a7yV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\x88W_\x80\xFD[Pa\x03\x91a\x1DsV[`@Qa\x03\x9E\x91\x90aBdV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\xB2W_\x80\xFD[Pa\x03\xCD`\x04\x806\x03\x81\x01\x90a\x03\xC8\x91\x90a7\xDDV[a\x1D\x8AV[`@Qa\x03\xDB\x92\x91\x90aB\xC5V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03\xEFW_\x80\xFD[Pa\x04\n`\x04\x806\x03\x81\x01\x90a\x04\x05\x91\x90aB\xFAV[a \x9CV[\0[4\x80\x15a\x04\x17W_\x80\xFD[Pa\x04 a\"\x86V[`@Qa\x04-\x91\x90aBdV[`@Q\x80\x91\x03\x90\xF3[```@Q\x80`@\x01`@R\x80`\r\x81R` \x01\x7FKMSGeneration\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RPa\x04w_a\"\x9DV[a\x04\x81`\x01a\"\x9DV[a\x04\x8A_a\"\x9DV[`@Q` \x01a\x04\x9D\x94\x93\x92\x91\x90aC\xF3V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x90V[``_a\x04\xBCa#gV[\x90P_\x81`\x03\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\x02\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x82\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x05tW` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x05+W[PPPPP\x92PPP\x91\x90PV[_\x80a\x05\x8Ca#gV[\x90P\x80`\x01\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\x05\xEFW\x82`@Q\x7F\x84\xDE\x131\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\x81R`\x04\x01a\x05\xE6\x91\x90aBdV[`@Q\x80\x91\x03\x90\xFD[_\x81`\x06\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x90P\x81`\r\x01_\x82\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x92PPP\x91\x90PV[`\x01a\x069a#\x8EV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x06zW`@Q\x7FoOs\x1F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02_a\x06\x85a#\xB2V[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x80a\x06\xCDWP\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x15[\x15a\x07\x04W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`\x01\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UPa\x07\xBD`@Q\x80`@\x01`@R\x80`\r\x81R` \x01\x7FKMSGeneration\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RP`@Q\x80`@\x01`@R\x80`\x01\x81R` \x01\x7F1\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\x81RPa#\xD9V[_a\x07\xC6a#gV[\x90P`\xF8`\x03`\x05\x81\x11\x15a\x07\xDEWa\x07\xDDa9\x0FV[[\x90\x1B\x81`\x04\x01\x81\x90UP`\xF8`\x04`\x05\x81\x11\x15a\x07\xFEWa\x07\xFDa9\x0FV[[\x90\x1B\x81`\x05\x01\x81\x90UP`\xF8`\x05\x80\x81\x11\x15a\x08\x1DWa\x08\x1Ca9\x0FV[[\x90\x1B\x81`\t\x01\x81\x90UPP_\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x82`@Qa\x08r\x91\x90aDsV[`@Q\x80\x91\x03\x90\xA1PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x08\xDBW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08\xFF\x91\x90aD\xA0V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\tnW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\te\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[_a\twa#gV[\x90P\x80`\t\x01_\x81T\x80\x92\x91\x90a\t\x8D\x90aE\x11V[\x91\x90PUP_\x81`\t\x01T\x90P\x83\x82`\n\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x82\x82`\r\x01_\x83\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83`\x01\x81\x11\x15a\t\xE7Wa\t\xE6a9\x0FV[[\x02\x17\x90UP\x7F?\x03\x8Fo\x88\xCB01\xB7q\x85\x88@:.\xC2 Wj\x86\x8B\xE0}\xDEL\x02\xB8F\xCA5.\xF5\x81\x85\x85`@Qa\n\x1F\x93\x92\x91\x90aEXV[`@Q\x80\x91\x03\x90\xA1PPPPV[_\x80a\n7a#gV[\x90P\x80`\x01\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\n\x9AW\x82`@Q\x7F\xDA2\xD0\x0F\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\x81R`\x04\x01a\n\x91\x91\x90aBdV[`@Q\x80\x91\x03\x90\xFD[\x80`\r\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0B\x0F\x91\x90aD\xCBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0B*W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0BN\x91\x90aE\xC2V[a\x0B\x8FW3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x0B\x86\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[_a\x0B\x98a#gV[\x90P_\x81`\x06\x01_\x88\x81R` \x01\x90\x81R` \x01_ T\x90P_a\x0B\xBE\x82\x89\x89\x89a#\xEFV[\x90P_a\x0B\xCC\x82\x87\x87a%\xC6V[\x90P\x83_\x01_\x8A\x81R` \x01\x90\x81R` \x01_ _\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x0ClW\x88\x81`@Q\x7F\x98\xFB\x95}\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\x81R`\x04\x01a\x0Cc\x92\x91\x90aE\xEDV[`@Q\x80\x91\x03\x90\xFD[`\x01\x84_\x01_\x8B\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_\x84`\x02\x01_\x8B\x81R` \x01\x90\x81R` \x01_ _\x84\x81R` \x01\x90\x81R` \x01_ \x90P\x803\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP_\x81\x80T\x90P\x90P\x85`\x01\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\r\x8FWPa\r\x8E\x81a&+V[[\x15a\x0F\xFAW`\x01\x86`\x01\x01_\x8D\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_[\x8A\x8A\x90P\x81\x10\x15a\x0EEW\x86`\x07\x01_\x8D\x81R` \x01\x90\x81R` \x01_ \x8B\x8B\x83\x81\x81\x10a\r\xF2Wa\r\xF1aF\x14V[[\x90P` \x02\x81\x01\x90a\x0E\x04\x91\x90aFMV[\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x90`\x02\x02\x01_\x90\x91\x90\x91\x90\x91P\x81\x81a\x0E6\x91\x90aJ\x89V[PP\x80\x80`\x01\x01\x91PPa\r\xC1V[P\x83\x86`\x03\x01_\x8D\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x8A\x86`\x08\x01\x81\x90UP_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0E\x82Wa\x0E\x81a;qV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x0E\xB5W\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x0E\xA0W\x90P[P\x90P_[\x82\x81\x10\x15a\x0F\xBAWs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE3\xB2\xA8t\x85\x83\x81T\x81\x10a\x0F\x05Wa\x0F\x04aF\x14V[[\x90_R` _ \x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0FI\x91\x90aD\xCBV[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0FcW=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0F\x8B\x91\x90aK\xEAV[``\x01Q\x82\x82\x81Q\x81\x10a\x0F\xA2Wa\x0F\xA1aF\x14V[[` \x02` \x01\x01\x81\x90RP\x80\x80`\x01\x01\x91PPa\x0E\xBAV[P\x7F\xEB\x85\xC2m\xBC\xADF\xB8\nh\xA0\xF2L\xCE|,\x90\xF0\xA1\xFA\xDE\xD8A\x84\x13\x889\xFC\x9E\x80\xA2[\x8C\x82\x8D\x8D`@Qa\x0F\xF0\x94\x93\x92\x91\x90aN\x02V[`@Q\x80\x91\x03\x90\xA1P[PPPPPPPPPPPV[a\x10\x0Fa&\xBCV[a\x10\x18\x82a'\xA2V[a\x10\"\x82\x82a(\x95V[PPV[_a\x10/a)\xB3V[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x10\xA4\x91\x90aD\xCBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x10\xBFW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10\xE3\x91\x90aE\xC2V[a\x11$W3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x11\x1B\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[_a\x11-a#gV[\x90P_a\x119\x85a*:V[\x90P_a\x11G\x82\x86\x86a%\xC6V[\x90P\x82_\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x11\xE7W\x85\x81`@Q\x7F3\xCA\x1F\xE3\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\x81R`\x04\x01a\x11\xDE\x92\x91\x90aE\xEDV[`@Q\x80\x91\x03\x90\xFD[`\x01\x83_\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_\x83`\x02\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x84\x81R` \x01\x90\x81R` \x01_ \x90P\x803\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x83`\x01\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x13\x06WPa\x13\x05\x81\x80T\x90Pa&+V[[\x15a\x13\xA0W`\x01\x84`\x01\x01_\x89\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x82\x84`\x03\x01_\x89\x81R` \x01\x90\x81R` \x01_ \x81\x90UP_\x84`\x06\x01_\x89\x81R` \x01\x90\x81R` \x01_ T\x90P\x7Fx\xB1y\x17m\x1F\x19\xD7\xC2\x8E\x80\x82=\xEB\xA2bM\xA2\xCA.\xC6K\x17\x01\xF3c*\x87\xC9\xAE\xDC\x92\x88\x82`@Qa\x13\x96\x92\x91\x90aNGV[`@Q\x80\x91\x03\x90\xA1P[PPPPPPPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE5'^\xAF3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x13\xF6\x91\x90aD\xCBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x14\x11W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x145\x91\x90aE\xC2V[a\x14vW3`@Q\x7F\xAE\xE8c#\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\x81R`\x04\x01a\x14m\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[_a\x14\x7Fa#gV[\x90P_\x81`\n\x01_\x88\x81R` \x01\x90\x81R` \x01_ T\x90P_a\x14\xA5\x88\x83\x89\x89a*\x92V[\x90P_a\x14\xB3\x82\x87\x87a%\xC6V[\x90P\x83_\x01_\x8A\x81R` \x01\x90\x81R` \x01_ _\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x15SW\x88\x81`@Q\x7F\xFC\xF5\xA6\xE9\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\x81R`\x04\x01a\x15J\x92\x91\x90aE\xEDV[`@Q\x80\x91\x03\x90\xFD[`\x01\x84_\x01_\x8B\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_\x84`\x02\x01_\x8B\x81R` \x01\x90\x81R` \x01_ _\x84\x81R` \x01\x90\x81R` \x01_ \x90P\x803\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP_\x81\x80T\x90P\x90P\x85`\x01\x01_\x8C\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x16vWPa\x16u\x81a&+V[[\x15a\x18}W`\x01\x86`\x01\x01_\x8D\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x89\x89\x87`\x0B\x01_\x8E\x81R` \x01\x90\x81R` \x01_ \x91\x82a\x16\xC8\x92\x91\x90aIhV[P\x83\x86`\x03\x01_\x8D\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x8A\x86`\x0C\x01\x81\x90UP_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17\x05Wa\x17\x04a;qV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x178W\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x17#W\x90P[P\x90P_[\x82\x81\x10\x15a\x18=Ws\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE3\xB2\xA8t\x85\x83\x81T\x81\x10a\x17\x88Wa\x17\x87aF\x14V[[\x90_R` _ \x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x17\xCC\x91\x90aD\xCBV[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x17\xE6W=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x18\x0E\x91\x90aK\xEAV[``\x01Q\x82\x82\x81Q\x81\x10a\x18%Wa\x18$aF\x14V[[` \x02` \x01\x01\x81\x90RP\x80\x80`\x01\x01\x91PPa\x17=V[P\x7F\"X\xB7?\xAE\xD3?\xB2\xE2\xEAED\x03\xBE\xF9t\x92\x0C\xAFh*\xB3\xA7#HO\xCFgU;\x16\xA2\x8C\x82\x8D\x8D`@Qa\x18s\x94\x93\x92\x91\x90aN\x9AV[`@Q\x80\x91\x03\x90\xA1P[PPPPPPPPPPPV[_``\x80_\x80_``_a\x18\x9Ca+\x19V[\x90P_\x80\x1B\x81_\x01T\x14\x80\x15a\x18\xB7WP_\x80\x1B\x81`\x01\x01T\x14[a\x18\xF6W`@Q\x7F\x08\xC3y\xA0\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\x81R`\x04\x01a\x18\xED\x90aO)V[`@Q\x80\x91\x03\x90\xFD[a\x18\xFEa+@V[a\x19\x06a+\xDEV[F0_\x80\x1B_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x19%Wa\x19$a;qV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x19SW\x81` \x01` \x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x7F\x0F\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\x95\x94\x93\x92\x91\x90\x97P\x97P\x97P\x97P\x97P\x97P\x97PP\x90\x91\x92\x93\x94\x95\x96V[``\x80_a\x19\x9Fa#gV[\x90P\x80`\x01\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\x1A\x02W\x83`@Q\x7F\x84\xDE\x131\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\x81R`\x04\x01a\x19\xF9\x91\x90aBdV[`@Q\x80\x91\x03\x90\xFD[_\x81`\x03\x01_\x86\x81R` \x01\x90\x81R` \x01_ T\x90P_\x82`\x02\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x83\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x1A\xB9W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x1ApW[PPPPP\x90P_\x81Q\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1A\xE0Wa\x1A\xDFa;qV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1B\x13W\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x1A\xFEW\x90P[P\x90P_[\x82\x81\x10\x15a\x1B\xF8Ws\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE3\xB2\xA8t\x85\x83\x81Q\x81\x10a\x1BcWa\x1BbaF\x14V[[` \x02` \x01\x01Q`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1B\x87\x91\x90aD\xCBV[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1B\xA1W=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1B\xC9\x91\x90aK\xEAV[``\x01Q\x82\x82\x81Q\x81\x10a\x1B\xE0Wa\x1B\xDFaF\x14V[[` \x02` \x01\x01\x81\x90RP\x80\x80`\x01\x01\x91PPa\x1B\x18V[P\x80\x85`\x07\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x80\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01_\x90[\x82\x82\x10\x15a\x1D&W\x83\x82\x90_R` _ \x90`\x02\x02\x01`@Q\x80`@\x01`@R\x90\x81_\x82\x01_\x90T\x90a\x01\0\n\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x1CqWa\x1Cpa9\x0FV[[`\x01\x81\x11\x15a\x1C\x83Wa\x1C\x82a9\x0FV[[\x81R` \x01`\x01\x82\x01\x80Ta\x1C\x97\x90aG\x9BV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x1C\xC3\x90aG\x9BV[\x80\x15a\x1D\x0EW\x80`\x1F\x10a\x1C\xE5Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x1D\x0EV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x1C\xF1W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x81RPP\x81R` \x01\x90`\x01\x01\x90a\x1C-V[PPPP\x90P\x96P\x96PPPPPP\x91P\x91V[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[_\x80a\x1D}a#gV[\x90P\x80`\x0C\x01T\x91PP\x90V[``\x80_a\x1D\x96a#gV[\x90P\x80`\x01\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\x1D\xF9W\x83`@Q\x7F\xDA2\xD0\x0F\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\x81R`\x04\x01a\x1D\xF0\x91\x90aBdV[`@Q\x80\x91\x03\x90\xFD[_\x81`\x03\x01_\x86\x81R` \x01\x90\x81R` \x01_ T\x90P_\x82`\x02\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x83\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x1E\xB0W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x1EgW[PPPPP\x90P_\x81Q\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1E\xD7Wa\x1E\xD6a;qV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1F\nW\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x1E\xF5W\x90P[P\x90P_[\x82\x81\x10\x15a\x1F\xEFWs\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xE3\xB2\xA8t\x85\x83\x81Q\x81\x10a\x1FZWa\x1FYaF\x14V[[` \x02` \x01\x01Q`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x1F~\x91\x90aD\xCBV[_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1F\x98W=_\x80>=_\xFD[PPPP`@Q=_\x82>=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1F\xC0\x91\x90aK\xEAV[``\x01Q\x82\x82\x81Q\x81\x10a\x1F\xD7Wa\x1F\xD6aF\x14V[[` \x02` \x01\x01\x81\x90RP\x80\x80`\x01\x01\x91PPa\x1F\x0FV[P\x80\x85`\x0B\x01_\x8A\x81R` \x01\x90\x81R` \x01_ \x80\x80Ta \x10\x90aG\x9BV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta <\x90aG\x9BV[\x80\x15a \x87W\x80`\x1F\x10a ^Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a \x87V[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a jW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x96P\x96PPPPPP\x91P\x91V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a \xF9W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a!\x1D\x91\x90aD\xA0V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a!\x8CW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a!\x83\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[_a!\x95a#gV[\x90P\x80`\x04\x01_\x81T\x80\x92\x91\x90a!\xAB\x90aE\x11V[\x91\x90PUP_\x81`\x04\x01T\x90P\x81`\x05\x01_\x81T\x80\x92\x91\x90a!\xCC\x90aE\x11V[\x91\x90PUP_\x82`\x05\x01T\x90P\x80\x83`\x06\x01_\x84\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x81\x83`\x06\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP_\x84\x84`\r\x01_\x85\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83`\x01\x81\x11\x15a\"?Wa\">a9\x0FV[[\x02\x17\x90UP\x7F\x02\x02@\x07\xD9et\xDB\xC9\xD1\x13(\xBF\xEE\x98\x93\xE7\xC7\xBBN\xF4\xAA\x80m\xF3;\xFD\xF4T\xEB^`\x83\x82\x87`@Qa\"w\x93\x92\x91\x90aEXV[`@Q\x80\x91\x03\x90\xA1PPPPPV[_\x80a\"\x90a#gV[\x90P\x80`\x08\x01T\x91PP\x90V[``_`\x01a\"\xAB\x84a,|V[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\"\xC9Wa\"\xC8a;qV[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\"\xFBW\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a#\\W\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a#QWa#PaOGV[[\x04\x94P_\x85\x03a#\x08W[\x81\x93PPPP\x91\x90PV[_\x7F\x0B\x8F\xDB\x1F\ncV\xDD \xA6\xCB\xC6\xF9f\x8F\xAC#\xB8_\x96W]\x10\xE33\xE6\x03\xFA\xA7\x94\xAC\0\x90P\x90V[_a#\x97a#\xB2V[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[a#\xE1a-\xCDV[a#\xEB\x82\x82a.\rV[PPV[_\x80\x83\x83\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a$\x0EWa$\ra;qV[[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a$=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a&\xAE\x91\x90aQGV[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a'iWP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a'Pa/qV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a'\xA0W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a'\xFFW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a(#\x91\x90aD\xA0V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a(\x92W3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a(\x89\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a(\xFDWP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a(\xFA\x91\x90aQ\x9CV[`\x01[a)>W\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a)5\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a)\xA4W\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a)\x9B\x91\x90a=\x07V[`@Q\x80\x91\x03\x90\xFD[a)\xAE\x83\x83a/\xC4V[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a*8W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_a*\x8B`@Q\x80``\x01`@R\x80`,\x81R` \x01aTQ`,\x919\x80Q\x90` \x01 \x83`@Q` \x01a*p\x92\x91\x90aQ\xC7V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a.^V[\x90P\x91\x90PV[_a+\x0F`@Q\x80`\x80\x01`@R\x80`F\x81R` \x01aT\x0B`F\x919\x80Q\x90` \x01 \x86\x86\x86\x86`@Q` \x01a*\xCB\x92\x91\x90aO\xCDV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 `@Q` \x01a*\xF4\x94\x93\x92\x91\x90aP\xF0V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 a.^V[\x90P\x94\x93PPPPV[_\x7F\xA1jF\xD9Ba\xC7Q|\xC8\xFF\x89\xF6\x1C\x0C\xE95\x98\xE3\xC8I\x80\x10\x11\xDE\xE6I\xA6\xA5W\xD1\0\x90P\x90V[``_a+Ka+\x19V[\x90P\x80`\x02\x01\x80Ta+\\\x90aG\x9BV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta+\x88\x90aG\x9BV[\x80\x15a+\xD3W\x80`\x1F\x10a+\xAAWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a+\xD3V[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a+\xB6W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[``_a+\xE9a+\x19V[\x90P\x80`\x03\x01\x80Ta+\xFA\x90aG\x9BV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta,&\x90aG\x9BV[\x80\x15a,qW\x80`\x1F\x10a,HWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a,qV[\x82\x01\x91\x90_R` _ \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a,TW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x91PP\x90V[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a,\xD8Wz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a,\xCEWa,\xCDaOGV[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a-\x15Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a-\x0BWa-\naOGV[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a-DWf#\x86\xF2o\xC1\0\0\x83\x81a-:Wa-9aOGV[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a-mWc\x05\xF5\xE1\0\x83\x81a-cWa-baOGV[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a-\x92Wa'\x10\x83\x81a-\x88Wa-\x87aOGV[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a-\xB5W`d\x83\x81a-\xABWa-\xAAaOGV[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a-\xC4W`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[a-\xD5a06V[a.\x0BW`@Q\x7F\xD7\xE6\xBC\xF8\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[a.\x15a-\xCDV[_a.\x1Ea+\x19V[\x90P\x82\x81`\x02\x01\x90\x81a.1\x91\x90aRFV[P\x81\x81`\x03\x01\x90\x81a.C\x91\x90aRFV[P_\x80\x1B\x81_\x01\x81\x90UP_\x80\x1B\x81`\x01\x01\x81\x90UPPPPV[_a.pa.ja0TV[\x83a0bV[\x90P\x91\x90PV[_\x80_\x80a.\x85\x86\x86a0\xA2V[\x92P\x92P\x92Pa.\x95\x82\x82a0\xF7V[\x82\x93PPPP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c =\x01\x14\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a.\xEE\x91\x90aD\xCBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a/\tW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a/-\x91\x90aE\xC2V[a/nW\x80`@Q\x7F*|n\xF6\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\x81R`\x04\x01a/e\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[PV[_a/\x9D\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba2YV[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a/\xCD\x82a2bV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a0)Wa0#\x82\x82a3+V[Pa02V[a01a3\xABV[[PPV[_a0?a#\xB2V[_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x90P\x90V[_a0]a3\xE7V[\x90P\x90V[_`@Q\x7F\x19\x01\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\x81R\x83`\x02\x82\x01R\x82`\"\x82\x01R`B\x81 \x91PP\x92\x91PPV[_\x80_`A\x84Q\x03a0\xE2W_\x80_` \x87\x01Q\x92P`@\x87\x01Q\x91P``\x87\x01Q_\x1A\x90Pa0\xD4\x88\x82\x85\x85a4JV[\x95P\x95P\x95PPPPa0\xF0V[_`\x02\x85Q_\x1B\x92P\x92P\x92P[\x92P\x92P\x92V[_`\x03\x81\x11\x15a1\nWa1\ta9\x0FV[[\x82`\x03\x81\x11\x15a1\x1DWa1\x1Ca9\x0FV[[\x03\x15a2UW`\x01`\x03\x81\x11\x15a17Wa16a9\x0FV[[\x82`\x03\x81\x11\x15a1JWa1Ia9\x0FV[[\x03a1\x81W`@Q\x7F\xF6E\xEE\xDF\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02`\x03\x81\x11\x15a1\x95Wa1\x94a9\x0FV[[\x82`\x03\x81\x11\x15a1\xA8Wa1\xA7a9\x0FV[[\x03a1\xECW\x80_\x1C`@Q\x7F\xFC\xE6\x98\xF7\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\x81R`\x04\x01a1\xE3\x91\x90aBdV[`@Q\x80\x91\x03\x90\xFD[`\x03\x80\x81\x11\x15a1\xFFWa1\xFEa9\x0FV[[\x82`\x03\x81\x11\x15a2\x12Wa2\x11a9\x0FV[[\x03a2TW\x80`@Q\x7F\xD7\x8B\xCE\x0C\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\x81R`\x04\x01a2K\x91\x90a=\x07V[`@Q\x80\x91\x03\x90\xFD[[PPV[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a2\xBDW\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a2\xB4\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[\x80a2\xE9\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba2YV[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa3T\x91\x90aSEV[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a3\x8CW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a3\x91V[``\x91P[P\x91P\x91Pa3\xA1\x85\x83\x83a51V[\x92PPP\x92\x91PPV[_4\x11\x15a3\xE5W`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0Fa4\x11a5\xBEV[a4\x19a64V[F0`@Q` \x01a4/\x95\x94\x93\x92\x91\x90aS[V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x90V[_\x80_\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF]WnsW\xA4P\x1D\xDF\xE9/Fh\x1B \xA0\x84_\x1C\x11\x15a4\x86W_`\x03\x85\x92P\x92P\x92Pa5'V[_`\x01\x88\x88\x88\x88`@Q_\x81R` \x01`@R`@Qa4\xA9\x94\x93\x92\x91\x90aS\xC7V[` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a4\xC9W=_\x80>=_\xFD[PPP` `@Q\x03Q\x90P_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x03a5\x1AW_`\x01_\x80\x1B\x93P\x93P\x93PPa5'V[\x80_\x80_\x1B\x93P\x93P\x93PP[\x94P\x94P\x94\x91PPV[``\x82a5FWa5A\x82a6\xABV[a5\xB6V[_\x82Q\x14\x80\x15a5lWP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a5\xAEW\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a5\xA5\x91\x90aD\xCBV[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa5\xB7V[[\x93\x92PPPV[_\x80a5\xC8a+\x19V[\x90P_a5\xD3a+@V[\x90P_\x81Q\x11\x15a5\xEFW\x80\x80Q\x90` \x01 \x92PPPa61V[_\x82_\x01T\x90P_\x80\x1B\x81\x14a6\nW\x80\x93PPPPa61V[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x80a6>a+\x19V[\x90P_a6Ia+\xDEV[\x90P_\x81Q\x11\x15a6eW\x80\x80Q\x90` \x01 \x92PPPa6\xA8V[_\x82`\x01\x01T\x90P_\x80\x1B\x81\x14a6\x81W\x80\x93PPPPa6\xA8V[\x7F\xC5\xD2F\x01\x86\xF7#<\x92~}\xB2\xDC\xC7\x03\xC0\xE5\0\xB6S\xCA\x82';{\xFA\xD8\x04]\x85\xA4p\x93PPPP[\x90V[_\x81Q\x11\x15a6\xBDW\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15a7&W\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa7\x0BV[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a7K\x82a6\xEFV[a7U\x81\x85a6\xF9V[\x93Pa7e\x81\x85` \x86\x01a7\tV[a7n\x81a71V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra7\x91\x81\x84a7AV[\x90P\x92\x91PPV[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[a7\xBC\x81a7\xAAV[\x81\x14a7\xC6W_\x80\xFD[PV[_\x815\x90Pa7\xD7\x81a7\xB3V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a7\xF2Wa7\xF1a7\xA2V[[_a7\xFF\x84\x82\x85\x01a7\xC9V[\x91PP\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a8Z\x82a81V[\x90P\x91\x90PV[a8j\x81a8PV[\x82RPPV[_a8{\x83\x83a8aV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a8\x9D\x82a8\x08V[a8\xA7\x81\x85a8\x12V[\x93Pa8\xB2\x83a8\"V[\x80_[\x83\x81\x10\x15a8\xE2W\x81Qa8\xC9\x88\x82a8pV[\x97Pa8\xD4\x83a8\x87V[\x92PP`\x01\x81\x01\x90Pa8\xB5V[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra9\x07\x81\x84a8\x93V[\x90P\x92\x91PPV[\x7FNH{q\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_R`!`\x04R`$_\xFD[`\x02\x81\x10a9MWa9La9\x0FV[[PV[_\x81\x90Pa9]\x82a9B\x81a>\x0EV[\x82RPPV[a>Q\x81a7\xAAV[\x82RPPV[a>`\x81a8PV[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a>\x98\x81a7\xAAV[\x82RPPV[_a>\xA9\x83\x83a>\x8FV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a>\xCB\x82a>fV[a>\xD5\x81\x85a>pV[\x93Pa>\xE0\x83a>\x80V[\x80_[\x83\x81\x10\x15a?\x10W\x81Qa>\xF7\x88\x82a>\x9EV[\x97Pa?\x02\x83a>\xB5V[\x92PP`\x01\x81\x01\x90Pa>\xE3V[P\x85\x93PPPP\x92\x91PPV[_`\xE0\x82\x01\x90Pa?0_\x83\x01\x8Aa>9V[\x81\x81\x03` \x83\x01Ra?B\x81\x89a7AV[\x90P\x81\x81\x03`@\x83\x01Ra?V\x81\x88a7AV[\x90Pa?e``\x83\x01\x87a>HV[a?r`\x80\x83\x01\x86a>WV[a?\x7F`\xA0\x83\x01\x85a<\xF8V[\x81\x81\x03`\xC0\x83\x01Ra?\x91\x81\x84a>\xC1V[\x90P\x98\x97PPPPPPPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_a?\xE2\x82a6\xEFV[a?\xEC\x81\x85a?\xC8V[\x93Pa?\xFC\x81\x85` \x86\x01a7\tV[a@\x05\x81a71V[\x84\x01\x91PP\x92\x91PPV[_a@\x1B\x83\x83a?\xD8V[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a@9\x82a?\x9FV[a@C\x81\x85a?\xA9V[\x93P\x83` \x82\x02\x85\x01a@U\x85a?\xB9V[\x80_[\x85\x81\x10\x15a@\x90W\x84\x84\x03\x89R\x81Qa@q\x85\x82a@\x10V[\x94Pa@|\x83a@#V[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90Pa@XV[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[`\x02\x81\x10a@\xDCWa@\xDBa9\x0FV[[PV[_\x81\x90Pa@\xEC\x82a@\xCBV[\x91\x90PV[_a@\xFB\x82a@\xDFV[\x90P\x91\x90PV[aA\x0B\x81a@\xF1V[\x82RPPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_aA5\x82aA\x11V[aA?\x81\x85aA\x1BV[\x93PaAO\x81\x85` \x86\x01a7\tV[aAX\x81a71V[\x84\x01\x91PP\x92\x91PPV[_`@\x83\x01_\x83\x01QaAx_\x86\x01\x82aA\x02V[P` \x83\x01Q\x84\x82\x03` \x86\x01RaA\x90\x82\x82aA+V[\x91PP\x80\x91PP\x92\x91PPV[_aA\xA8\x83\x83aAcV[\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aA\xC6\x82a@\xA2V[aA\xD0\x81\x85a@\xACV[\x93P\x83` \x82\x02\x85\x01aA\xE2\x85a@\xBCV[\x80_[\x85\x81\x10\x15aB\x1DW\x84\x84\x03\x89R\x81QaA\xFE\x85\x82aA\x9DV[\x94PaB\t\x83aA\xB0V[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90PaA\xE5V[P\x82\x97P\x87\x95PPPPPP\x92\x91PPV[_`@\x82\x01\x90P\x81\x81\x03_\x83\x01RaBG\x81\x85a@/V[\x90P\x81\x81\x03` \x83\x01RaB[\x81\x84aA\xBCV[\x90P\x93\x92PPPV[_` \x82\x01\x90PaBw_\x83\x01\x84a>HV[\x92\x91PPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_aB\x97\x82aA\x11V[aB\xA1\x81\x85aB}V[\x93PaB\xB1\x81\x85` \x86\x01a7\tV[aB\xBA\x81a71V[\x84\x01\x91PP\x92\x91PPV[_`@\x82\x01\x90P\x81\x81\x03_\x83\x01RaB\xDD\x81\x85a@/V[\x90P\x81\x81\x03` \x83\x01RaB\xF1\x81\x84aB\x8DV[\x90P\x93\x92PPPV[_` \x82\x84\x03\x12\x15aC\x0FWaC\x0Ea7\xA2V[[_aC\x1C\x84\x82\x85\x01a9\xAAV[\x91PP\x92\x91PPV[_\x81\x90P\x92\x91PPV[_aC9\x82a6\xEFV[aCC\x81\x85aC%V[\x93PaCS\x81\x85` \x86\x01a7\tV[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_aC\x93`\x02\x83aC%V[\x91PaC\x9E\x82aC_V[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_aC\xDD`\x01\x83aC%V[\x91PaC\xE8\x82aC\xA9V[`\x01\x82\x01\x90P\x91\x90PV[_aC\xFE\x82\x87aC/V[\x91PaD\t\x82aC\x87V[\x91PaD\x15\x82\x86aC/V[\x91PaD \x82aC\xD1V[\x91PaD,\x82\x85aC/V[\x91PaD7\x82aC\xD1V[\x91PaDC\x82\x84aC/V[\x91P\x81\x90P\x95\x94PPPPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[aDm\x81aDQV[\x82RPPV[_` \x82\x01\x90PaD\x86_\x83\x01\x84aDdV[\x92\x91PPV[_\x81Q\x90PaD\x9A\x81a;CV[\x92\x91PPV[_` \x82\x84\x03\x12\x15aD\xB5WaD\xB4a7\xA2V[[_aD\xC2\x84\x82\x85\x01aD\x8CV[\x91PP\x92\x91PPV[_` \x82\x01\x90PaD\xDE_\x83\x01\x84a>WV[\x92\x91PPV[\x7FNH{q\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_R`\x11`\x04R`$_\xFD[_aE\x1B\x82a7\xAAV[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03aEMWaELaD\xE4V[[`\x01\x82\x01\x90P\x91\x90PV[_``\x82\x01\x90PaEk_\x83\x01\x86a>HV[aEx` \x83\x01\x85a>HV[aE\x85`@\x83\x01\x84a9sV[\x94\x93PPPPV[_\x81\x15\x15\x90P\x91\x90PV[aE\xA1\x81aE\x8DV[\x81\x14aE\xABW_\x80\xFD[PV[_\x81Q\x90PaE\xBC\x81aE\x98V[\x92\x91PPV[_` \x82\x84\x03\x12\x15aE\xD7WaE\xD6a7\xA2V[[_aE\xE4\x84\x82\x85\x01aE\xAEV[\x91PP\x92\x91PPV[_`@\x82\x01\x90PaF\0_\x83\x01\x85a>HV[aF\r` \x83\x01\x84a>WV[\x93\x92PPPV[\x7FNH{q\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_R`2`\x04R`$_\xFD[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x825`\x01`@\x03\x836\x03\x03\x81\x12aFhWaFgaFAV[[\x80\x83\x01\x91PP\x92\x91PPV[`\x02\x81\x10aF\x80W_\x80\xFD[PV[_\x815aF\x8F\x81aFtV[\x80\x91PP\x91\x90PV[_\x81_\x1B\x90P\x91\x90PV[_`\xFFaF\xAF\x84aF\x98V[\x93P\x80\x19\x83\x16\x92P\x80\x84\x16\x83\x17\x91PP\x92\x91PPV[_aF\xCF\x82a@\xDFV[\x90P\x91\x90PV[_\x81\x90P\x91\x90PV[aF\xE8\x82aF\xC5V[aF\xFBaF\xF4\x82aF\xD6V[\x83TaF\xA3V[\x82UPPPV[_\x80\x835`\x01` \x03\x846\x03\x03\x81\x12aG\x1EWaG\x1DaFAV[[\x80\x84\x01\x92P\x825\x91Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aG@WaG?aFEV[[` \x83\x01\x92P`\x01\x82\x026\x03\x83\x13\x15aG\\WaG[aFIV[[P\x92P\x92\x90PV[_\x82\x90P\x92\x91PPV[\x7FNH{q\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_R`\"`\x04R`$_\xFD[_`\x02\x82\x04\x90P`\x01\x82\x16\x80aG\xB2W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03aG\xC5WaG\xC4aGnV[[P\x91\x90PV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[_` `\x1F\x83\x01\x04\x90P\x91\x90PV[_\x82\x82\x1B\x90P\x92\x91PPV[_`\x08\x83\x02aH'\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82aG\xECV[aH1\x86\x83aG\xECV[\x95P\x80\x19\x84\x16\x93P\x80\x86\x16\x84\x17\x92PPP\x93\x92PPPV[_\x81\x90P\x91\x90PV[_aHlaHgaHb\x84a7\xAAV[aHIV[a7\xAAV[\x90P\x91\x90PV[_\x81\x90P\x91\x90PV[aH\x85\x83aHRV[aH\x99aH\x91\x82aHsV[\x84\x84TaG\xF8V[\x82UPPPPV[_\x90V[aH\xADaH\xA1V[aH\xB8\x81\x84\x84aH|V[PPPV[[\x81\x81\x10\x15aH\xDBWaH\xD0_\x82aH\xA5V[`\x01\x81\x01\x90PaH\xBEV[PPV[`\x1F\x82\x11\x15aI WaH\xF1\x81aG\xCBV[aH\xFA\x84aG\xDDV[\x81\x01` \x85\x10\x15aI\tW\x81\x90P[aI\x1DaI\x15\x85aG\xDDV[\x83\x01\x82aH\xBDV[PP[PPPV[_\x82\x82\x1C\x90P\x92\x91PPV[_aI@_\x19\x84`\x08\x02aI%V[\x19\x80\x83\x16\x91PP\x92\x91PPV[_aIX\x83\x83aI1V[\x91P\x82`\x02\x02\x82\x17\x90P\x92\x91PPV[aIr\x83\x83aGdV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aI\x8BWaI\x8Aa;qV[[aI\x95\x82TaG\x9BV[aI\xA0\x82\x82\x85aH\xDFV[_`\x1F\x83\x11`\x01\x81\x14aI\xCDW_\x84\x15aI\xBBW\x82\x87\x015\x90P[aI\xC5\x85\x82aIMV[\x86UPaJ,V[`\x1F\x19\x84\x16aI\xDB\x86aG\xCBV[_[\x82\x81\x10\x15aJ\x02W\x84\x89\x015\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90PaI\xDDV[\x86\x83\x10\x15aJ\x1FW\x84\x89\x015aJ\x1B`\x1F\x89\x16\x82aI1V[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPPV[aJ@\x83\x83\x83aIhV[PPPV[_\x81\x01_\x83\x01\x80aJU\x81aF\x83V[\x90PaJa\x81\x84aF\xDFV[PPP`\x01\x81\x01` \x83\x01aJv\x81\x85aG\x02V[aJ\x81\x81\x83\x86aJ5V[PPPPPPV[aJ\x93\x82\x82aJEV[PPV[_\x80\xFD[_\x80\xFD[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aJ\xB9WaJ\xB8a;qV[[aJ\xC2\x82a71V[\x90P` \x81\x01\x90P\x91\x90PV[_aJ\xE1aJ\xDC\x84aJ\x9FV[a;\xCFV[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15aJ\xFDWaJ\xFCa;mV[[aK\x08\x84\x82\x85a7\tV[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12aK$WaK#a9\xFCV[[\x81QaK4\x84\x82` \x86\x01aJ\xCFV[\x91PP\x92\x91PPV[_`\x80\x82\x84\x03\x12\x15aKRWaKQaJ\x97V[[aK\\`\x80a;\xCFV[\x90P_aKk\x84\x82\x85\x01aD\x8CV[_\x83\x01RP` aK~\x84\x82\x85\x01aD\x8CV[` \x83\x01RP`@\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aK\xA2WaK\xA1aJ\x9BV[[aK\xAE\x84\x82\x85\x01aK\x10V[`@\x83\x01RP``\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aK\xD2WaK\xD1aJ\x9BV[[aK\xDE\x84\x82\x85\x01aK\x10V[``\x83\x01RP\x92\x91PPV[_` \x82\x84\x03\x12\x15aK\xFFWaK\xFEa7\xA2V[[_\x82\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aL\x1CWaL\x1Ba7\xA6V[[aL(\x84\x82\x85\x01aK=V[\x91PP\x92\x91PPV[_\x81\x90P\x91\x90PV[_\x815\x90PaLH\x81aFtV[\x92\x91PPV[_aL\\` \x84\x01\x84aL:V[\x90P\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x835`\x01` \x03\x846\x03\x03\x81\x12aL\x8CWaL\x8BaLlV[[\x83\x81\x01\x92P\x825\x91P` \x83\x01\x92Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15aL\xB4WaL\xB3aLdV[[`\x01\x82\x026\x03\x83\x13\x15aL\xCAWaL\xC9aLhV[[P\x92P\x92\x90PV[_aL\xDD\x83\x85aA\x1BV[\x93PaL\xEA\x83\x85\x84a<\x19V[aL\xF3\x83a71V[\x84\x01\x90P\x93\x92PPPV[_`@\x83\x01aM\x0F_\x84\x01\x84aLNV[aM\x1B_\x86\x01\x82aA\x02V[PaM)` \x84\x01\x84aLpV[\x85\x83\x03` \x87\x01RaM<\x83\x82\x84aL\xD2V[\x92PPP\x80\x91PP\x92\x91PPV[_aMU\x83\x83aL\xFEV[\x90P\x92\x91PPV[_\x825`\x01`@\x03\x836\x03\x03\x81\x12aMxWaMwaLlV[[\x82\x81\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aM\x9B\x83\x85a@\xACV[\x93P\x83` \x84\x02\x85\x01aM\xAD\x84aL1V[\x80_[\x87\x81\x10\x15aM\xF0W\x84\x84\x03\x89RaM\xC7\x82\x84aM]V[aM\xD1\x85\x82aMJV[\x94PaM\xDC\x83aM\x84V[\x92P` \x8A\x01\x99PP`\x01\x81\x01\x90PaM\xB0V[P\x82\x97P\x87\x94PPPPP\x93\x92PPPV[_``\x82\x01\x90PaN\x15_\x83\x01\x87a>HV[\x81\x81\x03` \x83\x01RaN'\x81\x86a@/V[\x90P\x81\x81\x03`@\x83\x01RaN<\x81\x84\x86aM\x90V[\x90P\x95\x94PPPPPV[_`@\x82\x01\x90PaNZ_\x83\x01\x85a>HV[aNg` \x83\x01\x84a>HV[\x93\x92PPPV[_aNy\x83\x85aB}V[\x93PaN\x86\x83\x85\x84a<\x19V[aN\x8F\x83a71V[\x84\x01\x90P\x93\x92PPPV[_``\x82\x01\x90PaN\xAD_\x83\x01\x87a>HV[\x81\x81\x03` \x83\x01RaN\xBF\x81\x86a@/V[\x90P\x81\x81\x03`@\x83\x01RaN\xD4\x81\x84\x86aNnV[\x90P\x95\x94PPPPPV[\x7FEIP712: Uninitialized\0\0\0\0\0\0\0\0\0\0\0_\x82\x01RPV[_aO\x13`\x15\x83a6\xF9V[\x91PaO\x1E\x82aN\xDFV[` \x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01RaO@\x81aO\x07V[\x90P\x91\x90PV[\x7FNH{q\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_R`\x12`\x04R`$_\xFD[_` \x82\x84\x03\x12\x15aO\x89WaO\x88a7\xA2V[[_aO\x96\x84\x82\x85\x01aL:V[\x91PP\x92\x91PPV[_\x81\x90P\x92\x91PPV[_aO\xB4\x83\x85aO\x9FV[\x93PaO\xC1\x83\x85\x84a<\x19V[\x82\x84\x01\x90P\x93\x92PPPV[_aO\xD9\x82\x84\x86aO\xA9V[\x91P\x81\x90P\x93\x92PPPV[aO\xEE\x81a@\xF1V[\x82RPPV[_``\x82\x01\x90PaP\x07_\x83\x01\x86a<\xF8V[aP\x14` \x83\x01\x85aO\xE5V[aP!`@\x83\x01\x84a<\xF8V[\x94\x93PPPPV[_\x81Q\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[aPU\x81a<\xEFV[\x82RPPV[_aPf\x83\x83aPLV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_aP\x88\x82aP)V[aP\x92\x81\x85aP3V[\x93PaP\x9D\x83aP=V[\x80_[\x83\x81\x10\x15aP\xCDW\x81QaP\xB4\x88\x82aP[V[\x97PaP\xBF\x83aPrV[\x92PP`\x01\x81\x01\x90PaP\xA0V[P\x85\x93PPPP\x92\x91PPV[_aP\xE5\x82\x84aP~V[\x91P\x81\x90P\x92\x91PPV[_`\x80\x82\x01\x90PaQ\x03_\x83\x01\x87a<\xF8V[aQ\x10` \x83\x01\x86a>HV[aQ\x1D`@\x83\x01\x85a>HV[aQ*``\x83\x01\x84a<\xF8V[\x95\x94PPPPPV[_\x81Q\x90PaQA\x81a7\xB3V[\x92\x91PPV[_` \x82\x84\x03\x12\x15aQ\\WaQ[a7\xA2V[[_aQi\x84\x82\x85\x01aQ3V[\x91PP\x92\x91PPV[aQ{\x81a<\xEFV[\x81\x14aQ\x85W_\x80\xFD[PV[_\x81Q\x90PaQ\x96\x81aQrV[\x92\x91PPV[_` \x82\x84\x03\x12\x15aQ\xB1WaQ\xB0a7\xA2V[[_aQ\xBE\x84\x82\x85\x01aQ\x88V[\x91PP\x92\x91PPV[_`@\x82\x01\x90PaQ\xDA_\x83\x01\x85a<\xF8V[aQ\xE7` \x83\x01\x84a>HV[\x93\x92PPPV[_\x81\x90P\x81_R` _ \x90P\x91\x90PV[`\x1F\x82\x11\x15aRAWaR\x12\x81aQ\xEEV[aR\x1B\x84aG\xDDV[\x81\x01` \x85\x10\x15aR*W\x81\x90P[aR>aR6\x85aG\xDDV[\x83\x01\x82aH\xBDV[PP[PPPV[aRO\x82a6\xEFV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15aRhWaRga;qV[[aRr\x82TaG\x9BV[aR}\x82\x82\x85aR\0V[_` \x90P`\x1F\x83\x11`\x01\x81\x14aR\xAEW_\x84\x15aR\x9CW\x82\x87\x01Q\x90P[aR\xA6\x85\x82aIMV[\x86UPaS\rV[`\x1F\x19\x84\x16aR\xBC\x86aQ\xEEV[_[\x82\x81\x10\x15aR\xE3W\x84\x89\x01Q\x82U`\x01\x82\x01\x91P` \x85\x01\x94P` \x81\x01\x90PaR\xBEV[\x86\x83\x10\x15aS\0W\x84\x89\x01QaR\xFC`\x1F\x89\x16\x82aI1V[\x83UP[`\x01`\x02\x88\x02\x01\x88UPPP[PPPPPPV[_aS\x1F\x82aA\x11V[aS)\x81\x85aO\x9FV[\x93PaS9\x81\x85` \x86\x01a7\tV[\x80\x84\x01\x91PP\x92\x91PPV[_aSP\x82\x84aS\x15V[\x91P\x81\x90P\x92\x91PPV[_`\xA0\x82\x01\x90PaSn_\x83\x01\x88a<\xF8V[aS{` \x83\x01\x87a<\xF8V[aS\x88`@\x83\x01\x86a<\xF8V[aS\x95``\x83\x01\x85a>HV[aS\xA2`\x80\x83\x01\x84a>WV[\x96\x95PPPPPPV[_`\xFF\x82\x16\x90P\x91\x90PV[aS\xC1\x81aS\xACV[\x82RPPV[_`\x80\x82\x01\x90PaS\xDA_\x83\x01\x87a<\xF8V[aS\xE7` \x83\x01\x86aS\xB8V[aS\xF4`@\x83\x01\x85a<\xF8V[aT\x01``\x83\x01\x84a<\xF8V[\x95\x94PPPPPV\xFECrsgenVerification(uint256 crsId,uint256 maxBitLength,bytes crsDigest)PrepKeygenVerification(uint256 prepKeygenId)KeygenVerification(uint256 prepKeygenId,uint256 keyId,KeyDigest[] keyDigests)KeyDigest(uint8 keyType,bytes digest)KeyDigest(uint8 keyType,bytes digest)", ); #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] diff --git a/gateway-contracts/rust_bindings/src/multichain_acl.rs b/gateway-contracts/rust_bindings/src/multichain_acl.rs index 5bc2580f8..db07d531d 100644 --- a/gateway-contracts/rust_bindings/src/multichain_acl.rs +++ b/gateway-contracts/rust_bindings/src/multichain_acl.rs @@ -3,16 +3,10 @@ Generated by the following Solidity interface... ```solidity interface MultichainACL { - struct DelegationAccounts { - address delegatorAddress; - address delegatedAddress; - } - error AddressEmptyCode(address target); error ContractsMaxLengthExceeded(uint256 maxLength, uint256 actualLength); error CoprocessorAlreadyAllowedAccount(bytes32 ctHandle, address account, address txSender); error CoprocessorAlreadyAllowedPublicDecrypt(bytes32 ctHandle, address txSender); - error CoprocessorAlreadyDelegated(uint256 chainId, DelegationAccounts delegationAccounts, address[] contractAddresses, address txSender); error ERC1967InvalidImplementation(address implementation); error ERC1967NonPayable(); error EmptyContractAddresses(); @@ -33,7 +27,6 @@ interface MultichainACL { event AllowAccount(bytes32 indexed ctHandle, address accountAddress); event AllowPublicDecrypt(bytes32 indexed ctHandle); - event DelegateAccount(uint256 indexed chainId, DelegationAccounts delegationAccounts, address[] contractAddresses); event Initialized(uint64 version); event Upgraded(address indexed implementation); @@ -42,14 +35,11 @@ interface MultichainACL { function UPGRADE_INTERFACE_VERSION() external view returns (string memory); function allowAccount(bytes32 ctHandle, address accountAddress, bytes memory) external; function allowPublicDecrypt(bytes32 ctHandle, bytes memory) external; - function delegateAccount(uint256 chainId, DelegationAccounts memory delegationAccounts, address[] memory contractAddresses) external; function getAllowAccountConsensusTxSenders(bytes32 ctHandle, address accountAddress) external view returns (address[] memory); function getAllowPublicDecryptConsensusTxSenders(bytes32 ctHandle) external view returns (address[] memory); - function getDelegateAccountConsensusTxSenders(uint256 chainId, DelegationAccounts memory delegationAccounts, address[] memory contractAddresses) external view returns (address[] memory); function getVersion() external pure returns (string memory); function initializeFromEmptyProxy() external; function isAccountAllowed(bytes32 ctHandle, address accountAddress) external view returns (bool); - function isAccountDelegated(uint256 chainId, DelegationAccounts memory delegationAccounts, address[] memory contractAddresses) external view returns (bool); function isPublicDecryptAllowed(bytes32 ctHandle) external view returns (bool); function proxiableUUID() external view returns (bytes32); function upgradeToAndCall(address newImplementation, bytes memory data) external payable; @@ -118,41 +108,6 @@ interface MultichainACL { "outputs": [], "stateMutability": "nonpayable" }, - { - "type": "function", - "name": "delegateAccount", - "inputs": [ - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "delegationAccounts", - "type": "tuple", - "internalType": "struct DelegationAccounts", - "components": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegatedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "contractAddresses", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, { "type": "function", "name": "getAllowAccountConsensusTxSenders", @@ -196,47 +151,6 @@ interface MultichainACL { ], "stateMutability": "view" }, - { - "type": "function", - "name": "getDelegateAccountConsensusTxSenders", - "inputs": [ - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "delegationAccounts", - "type": "tuple", - "internalType": "struct DelegationAccounts", - "components": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegatedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "contractAddresses", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [ - { - "name": "", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, { "type": "function", "name": "getVersion", @@ -281,47 +195,6 @@ interface MultichainACL { ], "stateMutability": "view" }, - { - "type": "function", - "name": "isAccountDelegated", - "inputs": [ - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "delegationAccounts", - "type": "tuple", - "internalType": "struct DelegationAccounts", - "components": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegatedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "contractAddresses", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, { "type": "function", "name": "isPublicDecryptAllowed", @@ -404,43 +277,6 @@ interface MultichainACL { ], "anonymous": false }, - { - "type": "event", - "name": "DelegateAccount", - "inputs": [ - { - "name": "chainId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "delegationAccounts", - "type": "tuple", - "indexed": false, - "internalType": "struct DelegationAccounts", - "components": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegatedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "contractAddresses", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - } - ], - "anonymous": false - }, { "type": "event", "name": "Initialized", @@ -531,44 +367,6 @@ interface MultichainACL { } ] }, - { - "type": "error", - "name": "CoprocessorAlreadyDelegated", - "inputs": [ - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "delegationAccounts", - "type": "tuple", - "internalType": "struct DelegationAccounts", - "components": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegatedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "contractAddresses", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "txSender", - "type": "address", - "internalType": "address" - } - ] - }, { "type": "error", "name": "ERC1967InvalidImplementation", @@ -729,245 +527,25 @@ pub mod MultichainACL { /// The creation / init bytecode of the contract. /// /// ```text - ///0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801562000043575f80fd5b50620000546200005a60201b60201c565b620001c4565b5f6200006b6200015e60201b60201c565b9050805f0160089054906101000a900460ff1615620000b6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146200015b5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051620001529190620001a9565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b620001a38162000185565b82525050565b5f602082019050620001be5f83018462000198565b92915050565b608051613011620001eb5f395f8181611ad801528181611b2d0152611dcf01526130115ff3fe6080604052600436106100dc575f3560e01c806397c49a401161007e578063ae95318611610058578063ae953186146102a8578063c6528f69146102e4578063d90724b514610320578063f4c5f49314610348576100dc565b806397c49a4014610206578063ad3cb1cc14610242578063ad8b0b2b1461026c576100dc565b80632b13591c116100ba5780632b13591c1461016e57806339f73810146101aa5780634f1ef286146101c057806352d1902d146101dc576100dc565b80630620326d146100e05780630d8e6e2c1461011c578063294a870514610146575b5f80fd5b3480156100eb575f80fd5b5061010660048036038101906101019190612345565b610370565b604051610113919061238a565b60405180910390f35b348015610127575f80fd5b506101306103a4565b60405161013d919061242d565b60405180910390f35b348015610151575f80fd5b5061016c60048036038101906101679190612508565b61041f565b005b348015610179575f80fd5b50610194600480360381019061018f9190612623565b6109c5565b6040516101a1919061238a565b60405180910390f35b3480156101b5575f80fd5b506101be610b35565b005b6101da60048036038101906101d591906127bc565b610ca5565b005b3480156101e7575f80fd5b506101f0610cc4565b6040516101fd9190612825565b60405180910390f35b348015610211575f80fd5b5061022c60048036038101906102279190612345565b610cf5565b60405161023991906128f5565b60405180910390f35b34801561024d575f80fd5b50610256610d9e565b604051610263919061242d565b60405180910390f35b348015610277575f80fd5b50610292600480360381019061028d9190612623565b610dd7565b60405161029f91906128f5565b60405180910390f35b3480156102b3575f80fd5b506102ce60048036038101906102c99190612915565b610e94565b6040516102db91906128f5565b60405180910390f35b3480156102ef575f80fd5b5061030a60048036038101906103059190612915565b610f7a565b604051610317919061238a565b60405180910390f35b34801561032b575f80fd5b5061034660048036038101906103419190612953565b610fea565b005b348015610353575f80fd5b5061036e60048036038101906103699190612623565b6113e4565b005b5f8061037a6118f0565b9050806006015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b60606040518060400160405280600d81526020017f4d756c7469636861696e41434c000000000000000000000000000000000000008152506103e55f611917565b6103ef6001611917565b6103f85f611917565b60405160200161040b9493929190612a7e565b604051602081830303815290604052905090565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b815260040161046c9190612aeb565b602060405180830381865afa158015610487573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ab9190612b2e565b6104ec57336040517f52d725f50000000000000000000000000000000000000000000000000000000081526004016104e39190612aeb565b60405180910390fd5b835f6104f7826119e1565b905073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663bff3aaba826040518263ffffffff1660e01b81526004016105469190612b68565b602060405180830381865afa158015610561573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105859190612b2e565b6105c657806040517fb6679c3b0000000000000000000000000000000000000000000000000000000081526004016105bd9190612b68565b60405180910390fd5b5f6105cf6118f0565b9050806005015f8881526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156106ad578686336040517f6637e32d0000000000000000000000000000000000000000000000000000000081526004016106a493929190612b81565b60405180910390fd5b806004015f8881526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061070b90612be3565b91905055506001816005015f8981526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001015f8881526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003015f8881526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156109185750610917816004015f8981526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546119fa565b5b156109bc576001816003015f8981526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550867f18f825f318ffa4ed5bf3f6ed24fd54d33378b0e9f16ddb37c3419691b2e16566876040516109b39190612aeb565b60405180910390a25b50505050505050565b5f8083839050036109d8575f9050610b2d565b5f6109e16118f0565b90505f5b84849050811015610b265781600c015f875f016020810190610a079190612c2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f876020016020810190610a549190612c2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8881526020019081526020015f205f868684818110610ab057610aaf612c55565b5b9050602002016020810190610ac59190612c2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610b19575f92505050610b2d565b80806001019150506109e5565b5060019150505b949350505050565b6001610b3f611a8b565b67ffffffffffffffff1614610b80576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f610b8b611aaf565b9050805f0160089054906101000a900460ff1680610bd357508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b15610c0a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff0219169083151502179055505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d282604051610c999190612ca4565b60405180910390a15050565b610cad611ad6565b610cb682611bbc565b610cc08282611caf565b5050565b5f610ccd611dcd565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b60605f610d006118f0565b9050805f015f8481526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610d9157602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610d48575b5050505050915050919050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60605f610de26118f0565b90505f610df187878787611e54565b9050816002015f8281526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610e8357602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610e3a575b505050505092505050949350505050565b60605f610e9f6118f0565b9050806001015f8581526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610f6c57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f23575b505050505091505092915050565b5f80610f846118f0565b9050806003015f8581526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1691505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b81526004016110379190612aeb565b602060405180830381865afa158015611052573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110769190612b2e565b6110b757336040517f52d725f50000000000000000000000000000000000000000000000000000000081526004016110ae9190612aeb565b60405180910390fd5b825f6110c2826119e1565b905073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663bff3aaba826040518263ffffffff1660e01b81526004016111119190612b68565b602060405180830381865afa15801561112c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111509190612b2e565b61119157806040517fb6679c3b0000000000000000000000000000000000000000000000000000000081526004016111889190612b68565b60405180910390fd5b5f61119a6118f0565b9050806008015f8781526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561123b5785336040517fa6f04d26000000000000000000000000000000000000000000000000000000008152600401611232929190612cbd565b60405180910390fd5b806007015f8781526020019081526020015f205f81548092919061125e90612be3565b91905055506001816008015f8881526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550805f015f8781526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806006015f8781526020019081526020015f205f9054906101000a900460ff1615801561137e575061137d816007015f8881526020019081526020015f20546119fa565b5b156113dc576001816006015f8881526020019081526020015f205f6101000a81548160ff021916908315150217905550857f0868eca75126ba0a46bbec5eefa883e20a13e6c7d936c9bf47ed886e2eb43d3a60405160405180910390a25b505050505050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b81526004016114319190612aeb565b602060405180830381865afa15801561144c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114709190612b2e565b6114b157336040517f52d725f50000000000000000000000000000000000000000000000000000000081526004016114a89190612aeb565b60405180910390fd5b5f82829050036114ed576040517f57cfa21700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a60ff1682829050111561153f57600a828290506040517fa7db2751000000000000000000000000000000000000000000000000000000008152600401611536929190612d29565b60405180910390fd5b5f6115486118f0565b90505f61155786868686611e54565b90505f82600b015f8381526020019081526020015f209050805f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156116025786868686336040517f0cc695ad0000000000000000000000000000000000000000000000000000000081526004016115f9959493929190612e13565b60405180910390fd5b82600a015f8381526020019081526020015f205f81548092919061162590612be3565b91905055506001815f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550826002015f8381526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826009015f8381526020019081526020015f205f9054906101000a900460ff16158015611734575061173383600a015f8481526020019081526020015f20546119fa565b5b156118e7575f83600c015f885f0160208101906117519190612c2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f88602001602081019061179e9190612c2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8981526020019081526020015f2090505f5b8686905081101561187d576001825f89898581811061180c5761180b612c55565b5b90506020020160208101906118219190612c2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506117ea565b506001846009015f8581526020019081526020015f205f6101000a81548160ff021916908315150217905550877f06c13155cfa90343cb4fba180ce8d383b4f56a5bc7aac0e5d8f194b64672a51e8888886040516118dd93929190612e5f565b60405180910390a2505b50505050505050565b5f7f7f733a54a70114addd729bcd827932a6c402ccf3920960665917bc2e6640f400905090565b60605f600161192584611e8c565b0190505f8167ffffffffffffffff81111561194357611942612698565b5b6040519080825280601f01601f1916602001820160405280156119755781602001600182028036833780820191505090505b5090505f82602001820190505b6001156119d6578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816119cb576119ca612e8f565b5b0494505f8503611982575b819350505050919050565b5f67ffffffffffffffff6010835f1c901c169050919050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16636799ef526040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a59573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a7d9190612ed0565b905080831015915050919050565b5f611a94611aaf565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480611b8357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611b6a611fdd565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611bba576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c3d9190612f0f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cac57336040517f0e56cf3d000000000000000000000000000000000000000000000000000000008152600401611ca39190612aeb565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611d1757506040513d601f19601f82011682018060405250810190611d149190612f4e565b60015b611d5857816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611d4f9190612aeb565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b8114611dbe57806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401611db59190612825565b60405180910390fd5b611dc88383612030565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611e52576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f84848484604051602001611e6c9493929190612f79565b604051602081830303815290604052805190602001209050949350505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611ee8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611ede57611edd612e8f565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611f25576d04ee2d6d415b85acef81000000008381611f1b57611f1a612e8f565b5b0492506020810190505b662386f26fc100008310611f5457662386f26fc100008381611f4a57611f49612e8f565b5b0492506010810190505b6305f5e1008310611f7d576305f5e1008381611f7357611f72612e8f565b5b0492506008810190505b6127108310611fa2576127108381611f9857611f97612e8f565b5b0492506004810190505b60648310611fc55760648381611fbb57611fba612e8f565b5b0492506002810190505b600a8310611fd4576001810190505b80915050919050565b5f6120097f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6120a2565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612039826120ab565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156120955761208f8282612174565b5061209e565b61209d6121f4565b5b5050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361210657806040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016120fd9190612aeb565b60405180910390fd5b806121327f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6120a2565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff168460405161219d9190612ffb565b5f60405180830381855af49150503d805f81146121d5576040519150601f19603f3d011682016040523d82523d5f602084013e6121da565b606091505b50915091506121ea858383612230565b9250505092915050565b5f34111561222e576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60608261224557612240826122bd565b6122b5565b5f825114801561226b57505f8473ffffffffffffffffffffffffffffffffffffffff163b145b156122ad57836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016122a49190612aeb565b60405180910390fd5b8190506122b6565b5b9392505050565b5f815111156122cf5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61232481612312565b811461232e575f80fd5b50565b5f8135905061233f8161231b565b92915050565b5f6020828403121561235a5761235961230a565b5b5f61236784828501612331565b91505092915050565b5f8115159050919050565b61238481612370565b82525050565b5f60208201905061239d5f83018461237b565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156123da5780820151818401526020810190506123bf565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6123ff826123a3565b61240981856123ad565b93506124198185602086016123bd565b612422816123e5565b840191505092915050565b5f6020820190508181035f83015261244581846123f5565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124768261244d565b9050919050565b6124868161246c565b8114612490575f80fd5b50565b5f813590506124a18161247d565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126124c8576124c76124a7565b5b8235905067ffffffffffffffff8111156124e5576124e46124ab565b5b602083019150836001820283011115612501576125006124af565b5b9250929050565b5f805f80606085870312156125205761251f61230a565b5b5f61252d87828801612331565b945050602061253e87828801612493565b935050604085013567ffffffffffffffff81111561255f5761255e61230e565b5b61256b878288016124b3565b925092505092959194509250565b5f819050919050565b61258b81612579565b8114612595575f80fd5b50565b5f813590506125a681612582565b92915050565b5f80fd5b5f604082840312156125c5576125c46125ac565b5b81905092915050565b5f8083601f8401126125e3576125e26124a7565b5b8235905067ffffffffffffffff811115612600576125ff6124ab565b5b60208301915083602082028301111561261c5761261b6124af565b5b9250929050565b5f805f806080858703121561263b5761263a61230a565b5b5f61264887828801612598565b9450506020612659878288016125b0565b935050606085013567ffffffffffffffff81111561267a5761267961230e565b5b612686878288016125ce565b925092505092959194509250565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6126ce826123e5565b810181811067ffffffffffffffff821117156126ed576126ec612698565b5b80604052505050565b5f6126ff612301565b905061270b82826126c5565b919050565b5f67ffffffffffffffff82111561272a57612729612698565b5b612733826123e5565b9050602081019050919050565b828183375f83830152505050565b5f61276061275b84612710565b6126f6565b90508281526020810184848401111561277c5761277b612694565b5b612787848285612740565b509392505050565b5f82601f8301126127a3576127a26124a7565b5b81356127b384826020860161274e565b91505092915050565b5f80604083850312156127d2576127d161230a565b5b5f6127df85828601612493565b925050602083013567ffffffffffffffff811115612800576127ff61230e565b5b61280c8582860161278f565b9150509250929050565b61281f81612312565b82525050565b5f6020820190506128385f830184612816565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6128708161246c565b82525050565b5f6128818383612867565b60208301905092915050565b5f602082019050919050565b5f6128a38261283e565b6128ad8185612848565b93506128b883612858565b805f5b838110156128e85781516128cf8882612876565b97506128da8361288d565b9250506001810190506128bb565b5085935050505092915050565b5f6020820190508181035f83015261290d8184612899565b905092915050565b5f806040838503121561292b5761292a61230a565b5b5f61293885828601612331565b925050602061294985828601612493565b9150509250929050565b5f805f6040848603121561296a5761296961230a565b5b5f61297786828701612331565b935050602084013567ffffffffffffffff8111156129985761299761230e565b5b6129a4868287016124b3565b92509250509250925092565b5f81905092915050565b5f6129c4826123a3565b6129ce81856129b0565b93506129de8185602086016123bd565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f612a1e6002836129b0565b9150612a29826129ea565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f612a686001836129b0565b9150612a7382612a34565b600182019050919050565b5f612a8982876129ba565b9150612a9482612a12565b9150612aa082866129ba565b9150612aab82612a5c565b9150612ab782856129ba565b9150612ac282612a5c565b9150612ace82846129ba565b915081905095945050505050565b612ae58161246c565b82525050565b5f602082019050612afe5f830184612adc565b92915050565b612b0d81612370565b8114612b17575f80fd5b50565b5f81519050612b2881612b04565b92915050565b5f60208284031215612b4357612b4261230a565b5b5f612b5084828501612b1a565b91505092915050565b612b6281612579565b82525050565b5f602082019050612b7b5f830184612b59565b92915050565b5f606082019050612b945f830186612816565b612ba16020830185612adc565b612bae6040830184612adc565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612bed82612579565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c1f57612c1e612bb6565b5b600182019050919050565b5f60208284031215612c3f57612c3e61230a565b5b5f612c4c84828501612493565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f67ffffffffffffffff82169050919050565b612c9e81612c82565b82525050565b5f602082019050612cb75f830184612c95565b92915050565b5f604082019050612cd05f830185612816565b612cdd6020830184612adc565b9392505050565b5f60ff82169050919050565b5f819050919050565b5f612d13612d0e612d0984612ce4565b612cf0565b612579565b9050919050565b612d2381612cf9565b82525050565b5f604082019050612d3c5f830185612d1a565b612d496020830184612b59565b9392505050565b5f612d5e6020840184612493565b905092915050565b60408201612d765f830183612d50565b612d825f850182612867565b50612d906020830183612d50565b612d9d6020850182612867565b50505050565b5f819050919050565b5f602082019050919050565b5f612dc38385612848565b9350612dce82612da3565b805f5b85811015612e0657612de38284612d50565b612ded8882612876565b9750612df883612dac565b925050600181019050612dd1565b5085925050509392505050565b5f60a082019050612e265f830188612b59565b612e336020830187612d66565b8181036060830152612e46818587612db8565b9050612e556080830184612adc565b9695505050505050565b5f606082019050612e725f830186612d66565b8181036040830152612e85818486612db8565b9050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f81519050612eca81612582565b92915050565b5f60208284031215612ee557612ee461230a565b5b5f612ef284828501612ebc565b91505092915050565b5f81519050612f098161247d565b92915050565b5f60208284031215612f2457612f2361230a565b5b5f612f3184828501612efb565b91505092915050565b5f81519050612f488161231b565b92915050565b5f60208284031215612f6357612f6261230a565b5b5f612f7084828501612f3a565b91505092915050565b5f608082019050612f8c5f830187612b59565b612f996020830186612d66565b8181036060830152612fac818486612db8565b905095945050505050565b5f81519050919050565b5f81905092915050565b5f612fd582612fb7565b612fdf8185612fc1565b9350612fef8185602086016123bd565b80840191505092915050565b5f6130068284612fcb565b91508190509291505056 + ///0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801562000043575f80fd5b50620000546200005a60201b60201c565b620001c4565b5f6200006b6200015e60201b60201c565b9050805f0160089054906101000a900460ff1615620000b6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146200015b5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051620001529190620001a9565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b620001a38162000185565b82525050565b5f602082019050620001be5f83018462000198565b92915050565b608051612331620001eb5f395f818161116d015281816111c2015261146401526123315ff3fe60806040526004361061009b575f3560e01c806352d1902d1161006357806352d1902d1461015f57806397c49a4014610189578063ad3cb1cc146101c5578063ae953186146101ef578063c6528f691461022b578063d90724b5146102675761009b565b80630620326d1461009f5780630d8e6e2c146100db578063294a87051461010557806339f738101461012d5780634f1ef28614610143575b5f80fd5b3480156100aa575f80fd5b506100c560048036038101906100c091906119a2565b61028f565b6040516100d291906119e7565b60405180910390f35b3480156100e6575f80fd5b506100ef6102c3565b6040516100fc9190611a8a565b60405180910390f35b348015610110575f80fd5b5061012b60048036038101906101269190611b65565b61033e565b005b348015610138575f80fd5b50610141610787565b005b61015d60048036038101906101589190611cfe565b6108f7565b005b34801561016a575f80fd5b50610173610916565b6040516101809190611d67565b60405180910390f35b348015610194575f80fd5b506101af60048036038101906101aa91906119a2565b610947565b6040516101bc9190611e37565b60405180910390f35b3480156101d0575f80fd5b506101d96109f1565b6040516101e69190611a8a565b60405180910390f35b3480156101fa575f80fd5b5061021560048036038101906102109190611e57565b610a2a565b6040516102229190611e37565b60405180910390f35b348015610236575f80fd5b50610251600480360381019061024c9190611e57565b610ae3565b60405161025e91906119e7565b60405180910390f35b348015610272575f80fd5b5061028d60048036038101906102889190611e95565b610b26565b005b5f80610299610f53565b9050806003015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b60606040518060400160405280600d81526020017f4d756c7469636861696e41434c000000000000000000000000000000000000008152506103045f610f7a565b61030e6001610f7a565b6103175f610f7a565b60405160200161032a9493929190611fc0565b604051602081830303815290604052905090565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b815260040161038b919061202d565b602060405180830381865afa1580156103a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ca9190612070565b61040b57336040517f52d725f5000000000000000000000000000000000000000000000000000000008152600401610402919061202d565b60405180910390fd5b835f61041682611044565b905073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663bff3aaba826040518263ffffffff1660e01b815260040161046591906120b3565b602060405180830381865afa158015610480573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a49190612070565b6104e557806040517fb6679c3b0000000000000000000000000000000000000000000000000000000081526004016104dc91906120b3565b60405180910390fd5b5f6104ee610f53565b90505f6104fb888861105d565b90505f826005015f8381526020019081526020015f205403610531576001826005015f8381526020019081526020015f20819055505b815f015f8281526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156105d1578787336040517f6637e32d0000000000000000000000000000000000000000000000000000000081526004016105c8939291906120cc565b60405180910390fd5b816001015f8281526020019081526020015f205f8154809291906105f49061212e565b91905055506001825f015f8381526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550816002015f8281526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816003015f8281526020019081526020015f205f9054906101000a900460ff161580156107145750610713826001015f8381526020019081526020015f205461108f565b5b1561077d576001826003015f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550877f18f825f318ffa4ed5bf3f6ed24fd54d33378b0e9f16ddb37c3419691b2e1656688604051610774919061202d565b60405180910390a25b5050505050505050565b6001610791611120565b67ffffffffffffffff16146107d2576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f6107dd611144565b9050805f0160089054906101000a900460ff168061082557508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b1561085c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff0219169083151502179055505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2826040516108eb9190612197565b60405180910390a15050565b6108ff61116b565b61090882611251565b6109128282611344565b5050565b5f61091f611462565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b60605f610952610f53565b9050806002015f8481526020019081526020015f208054806020026020016040519081016040528092919081815260200182805480156109e457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161099b575b5050505050915050919050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60605f610a35610f53565b90505f610a42858561105d565b9050816002015f8281526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610ad457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610a8b575b50505050509250505092915050565b5f80610aed610f53565b90505f610afa858561105d565b9050816003015f8281526020019081526020015f205f9054906101000a900460ff169250505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b8152600401610b73919061202d565b602060405180830381865afa158015610b8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb29190612070565b610bf357336040517f52d725f5000000000000000000000000000000000000000000000000000000008152600401610bea919061202d565b60405180910390fd5b825f610bfe82611044565b905073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663bff3aaba826040518263ffffffff1660e01b8152600401610c4d91906120b3565b602060405180830381865afa158015610c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c8c9190612070565b610ccd57806040517fb6679c3b000000000000000000000000000000000000000000000000000000008152600401610cc491906120b3565b60405180910390fd5b5f610cd6610f53565b90505f816005015f8881526020019081526020015f205403610d0c576001816005015f8881526020019081526020015f20819055505b805f015f8781526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610daa5785336040517fa6f04d26000000000000000000000000000000000000000000000000000000008152600401610da19291906121b0565b60405180910390fd5b806001015f8781526020019081526020015f205f815480929190610dcd9061212e565b91905055506001815f015f8881526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806002015f8781526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003015f8781526020019081526020015f205f9054906101000a900460ff16158015610eed5750610eec816001015f8881526020019081526020015f205461108f565b5b15610f4b576001816003015f8881526020019081526020015f205f6101000a81548160ff021916908315150217905550857f0868eca75126ba0a46bbec5eefa883e20a13e6c7d936c9bf47ed886e2eb43d3a60405160405180910390a25b505050505050565b5f7f7f733a54a70114addd729bcd827932a6c402ccf3920960665917bc2e6640f400905090565b60605f6001610f88846114e9565b0190505f8167ffffffffffffffff811115610fa657610fa5611bda565b5b6040519080825280601f01601f191660200182016040528015610fd85781602001600182028036833780820191505090505b5090505f82602001820190505b600115611039578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161102e5761102d6121d7565b5b0494505f8503610fe5575b819350505050919050565b5f67ffffffffffffffff6010835f1c901c169050919050565b5f82826040516020016110719291906121b0565b60405160208183030381529060405280519060200120905092915050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16636799ef526040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611112919061222e565b905080831015915050919050565b5f611129611144565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061121857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166111ff61163a565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561124f576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d2919061226d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461134157336040517f0e56cf3d000000000000000000000000000000000000000000000000000000008152600401611338919061202d565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113ac57506040513d601f19601f820116820180604052508101906113a991906122ac565b60015b6113ed57816040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016113e4919061202d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461145357806040517faa1d49a400000000000000000000000000000000000000000000000000000000815260040161144a9190611d67565b60405180910390fd5b61145d838361168d565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146114e7576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611545577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161153b5761153a6121d7565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611582576d04ee2d6d415b85acef81000000008381611578576115776121d7565b5b0492506020810190505b662386f26fc1000083106115b157662386f26fc1000083816115a7576115a66121d7565b5b0492506010810190505b6305f5e10083106115da576305f5e10083816115d0576115cf6121d7565b5b0492506008810190505b61271083106115ff5761271083816115f5576115f46121d7565b5b0492506004810190505b606483106116225760648381611618576116176121d7565b5b0492506002810190505b600a8310611631576001810190505b80915050919050565b5f6116667f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6116ff565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61169682611708565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156116f2576116ec82826117d1565b506116fb565b6116fa611851565b5b5050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361176357806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161175a919061202d565b60405180910390fd5b8061178f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6116ff565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516117fa919061231b565b5f60405180830381855af49150503d805f8114611832576040519150601f19603f3d011682016040523d82523d5f602084013e611837565b606091505b509150915061184785838361188d565b9250505092915050565b5f34111561188b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060826118a25761189d8261191a565b611912565b5f82511480156118c857505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561190a57836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401611901919061202d565b60405180910390fd5b819050611913565b5b9392505050565b5f8151111561192c5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6119818161196f565b811461198b575f80fd5b50565b5f8135905061199c81611978565b92915050565b5f602082840312156119b7576119b6611967565b5b5f6119c48482850161198e565b91505092915050565b5f8115159050919050565b6119e1816119cd565b82525050565b5f6020820190506119fa5f8301846119d8565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611a37578082015181840152602081019050611a1c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611a5c82611a00565b611a668185611a0a565b9350611a76818560208601611a1a565b611a7f81611a42565b840191505092915050565b5f6020820190508181035f830152611aa28184611a52565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611ad382611aaa565b9050919050565b611ae381611ac9565b8114611aed575f80fd5b50565b5f81359050611afe81611ada565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112611b2557611b24611b04565b5b8235905067ffffffffffffffff811115611b4257611b41611b08565b5b602083019150836001820283011115611b5e57611b5d611b0c565b5b9250929050565b5f805f8060608587031215611b7d57611b7c611967565b5b5f611b8a8782880161198e565b9450506020611b9b87828801611af0565b935050604085013567ffffffffffffffff811115611bbc57611bbb61196b565b5b611bc887828801611b10565b925092505092959194509250565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611c1082611a42565b810181811067ffffffffffffffff82111715611c2f57611c2e611bda565b5b80604052505050565b5f611c4161195e565b9050611c4d8282611c07565b919050565b5f67ffffffffffffffff821115611c6c57611c6b611bda565b5b611c7582611a42565b9050602081019050919050565b828183375f83830152505050565b5f611ca2611c9d84611c52565b611c38565b905082815260208101848484011115611cbe57611cbd611bd6565b5b611cc9848285611c82565b509392505050565b5f82601f830112611ce557611ce4611b04565b5b8135611cf5848260208601611c90565b91505092915050565b5f8060408385031215611d1457611d13611967565b5b5f611d2185828601611af0565b925050602083013567ffffffffffffffff811115611d4257611d4161196b565b5b611d4e85828601611cd1565b9150509250929050565b611d618161196f565b82525050565b5f602082019050611d7a5f830184611d58565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611db281611ac9565b82525050565b5f611dc38383611da9565b60208301905092915050565b5f602082019050919050565b5f611de582611d80565b611def8185611d8a565b9350611dfa83611d9a565b805f5b83811015611e2a578151611e118882611db8565b9750611e1c83611dcf565b925050600181019050611dfd565b5085935050505092915050565b5f6020820190508181035f830152611e4f8184611ddb565b905092915050565b5f8060408385031215611e6d57611e6c611967565b5b5f611e7a8582860161198e565b9250506020611e8b85828601611af0565b9150509250929050565b5f805f60408486031215611eac57611eab611967565b5b5f611eb98682870161198e565b935050602084013567ffffffffffffffff811115611eda57611ed961196b565b5b611ee686828701611b10565b92509250509250925092565b5f81905092915050565b5f611f0682611a00565b611f108185611ef2565b9350611f20818560208601611a1a565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f611f60600283611ef2565b9150611f6b82611f2c565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f611faa600183611ef2565b9150611fb582611f76565b600182019050919050565b5f611fcb8287611efc565b9150611fd682611f54565b9150611fe28286611efc565b9150611fed82611f9e565b9150611ff98285611efc565b915061200482611f9e565b91506120108284611efc565b915081905095945050505050565b61202781611ac9565b82525050565b5f6020820190506120405f83018461201e565b92915050565b61204f816119cd565b8114612059575f80fd5b50565b5f8151905061206a81612046565b92915050565b5f6020828403121561208557612084611967565b5b5f6120928482850161205c565b91505092915050565b5f819050919050565b6120ad8161209b565b82525050565b5f6020820190506120c65f8301846120a4565b92915050565b5f6060820190506120df5f830186611d58565b6120ec602083018561201e565b6120f9604083018461201e565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6121388261209b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361216a57612169612101565b5b600182019050919050565b5f67ffffffffffffffff82169050919050565b61219181612175565b82525050565b5f6020820190506121aa5f830184612188565b92915050565b5f6040820190506121c35f830185611d58565b6121d0602083018461201e565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b61220d8161209b565b8114612217575f80fd5b50565b5f8151905061222881612204565b92915050565b5f6020828403121561224357612242611967565b5b5f6122508482850161221a565b91505092915050565b5f8151905061226781611ada565b92915050565b5f6020828403121561228257612281611967565b5b5f61228f84828501612259565b91505092915050565b5f815190506122a681611978565b92915050565b5f602082840312156122c1576122c0611967565b5b5f6122ce84828501612298565b91505092915050565b5f81519050919050565b5f81905092915050565b5f6122f5826122d7565b6122ff81856122e1565b935061230f818560208601611a1a565b80840191505092915050565b5f61232682846122eb565b91508190509291505056 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\xA0`@R0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RP4\x80\x15b\0\0CW_\x80\xFD[Pb\0\0Tb\0\0Z` \x1B` \x1CV[b\0\x01\xC4V[_b\0\0kb\0\x01^` \x1B` \x1CV[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15b\0\0\xB6W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14b\0\x01[Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Qb\0\x01R\x91\x90b\0\x01\xA9V[`@Q\x80\x91\x03\x90\xA1[PV[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[b\0\x01\xA3\x81b\0\x01\x85V[\x82RPPV[_` \x82\x01\x90Pb\0\x01\xBE_\x83\x01\x84b\0\x01\x98V[\x92\x91PPV[`\x80Qa0\x11b\0\x01\xEB_9_\x81\x81a\x1A\xD8\x01R\x81\x81a\x1B-\x01Ra\x1D\xCF\x01Ra0\x11_\xF3\xFE`\x80`@R`\x046\x10a\0\xDCW_5`\xE0\x1C\x80c\x97\xC4\x9A@\x11a\0~W\x80c\xAE\x951\x86\x11a\0XW\x80c\xAE\x951\x86\x14a\x02\xA8W\x80c\xC6R\x8Fi\x14a\x02\xE4W\x80c\xD9\x07$\xB5\x14a\x03 W\x80c\xF4\xC5\xF4\x93\x14a\x03HWa\0\xDCV[\x80c\x97\xC4\x9A@\x14a\x02\x06W\x80c\xAD<\xB1\xCC\x14a\x02BW\x80c\xAD\x8B\x0B+\x14a\x02lWa\0\xDCV[\x80c+\x13Y\x1C\x11a\0\xBAW\x80c+\x13Y\x1C\x14a\x01nW\x80c9\xF78\x10\x14a\x01\xAAW\x80cO\x1E\xF2\x86\x14a\x01\xC0W\x80cR\xD1\x90-\x14a\x01\xDCWa\0\xDCV[\x80c\x06 2m\x14a\0\xE0W\x80c\r\x8En,\x14a\x01\x1CW\x80c)J\x87\x05\x14a\x01FW[_\x80\xFD[4\x80\x15a\0\xEBW_\x80\xFD[Pa\x01\x06`\x04\x806\x03\x81\x01\x90a\x01\x01\x91\x90a#EV[a\x03pV[`@Qa\x01\x13\x91\x90a#\x8AV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01'W_\x80\xFD[Pa\x010a\x03\xA4V[`@Qa\x01=\x91\x90a$-V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01QW_\x80\xFD[Pa\x01l`\x04\x806\x03\x81\x01\x90a\x01g\x91\x90a%\x08V[a\x04\x1FV[\0[4\x80\x15a\x01yW_\x80\xFD[Pa\x01\x94`\x04\x806\x03\x81\x01\x90a\x01\x8F\x91\x90a&#V[a\t\xC5V[`@Qa\x01\xA1\x91\x90a#\x8AV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xB5W_\x80\xFD[Pa\x01\xBEa\x0B5V[\0[a\x01\xDA`\x04\x806\x03\x81\x01\x90a\x01\xD5\x91\x90a'\xBCV[a\x0C\xA5V[\0[4\x80\x15a\x01\xE7W_\x80\xFD[Pa\x01\xF0a\x0C\xC4V[`@Qa\x01\xFD\x91\x90a(%V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\x11W_\x80\xFD[Pa\x02,`\x04\x806\x03\x81\x01\x90a\x02'\x91\x90a#EV[a\x0C\xF5V[`@Qa\x029\x91\x90a(\xF5V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02MW_\x80\xFD[Pa\x02Va\r\x9EV[`@Qa\x02c\x91\x90a$-V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02wW_\x80\xFD[Pa\x02\x92`\x04\x806\x03\x81\x01\x90a\x02\x8D\x91\x90a&#V[a\r\xD7V[`@Qa\x02\x9F\x91\x90a(\xF5V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\xB3W_\x80\xFD[Pa\x02\xCE`\x04\x806\x03\x81\x01\x90a\x02\xC9\x91\x90a)\x15V[a\x0E\x94V[`@Qa\x02\xDB\x91\x90a(\xF5V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\xEFW_\x80\xFD[Pa\x03\n`\x04\x806\x03\x81\x01\x90a\x03\x05\x91\x90a)\x15V[a\x0FzV[`@Qa\x03\x17\x91\x90a#\x8AV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03+W_\x80\xFD[Pa\x03F`\x04\x806\x03\x81\x01\x90a\x03A\x91\x90a)SV[a\x0F\xEAV[\0[4\x80\x15a\x03SW_\x80\xFD[Pa\x03n`\x04\x806\x03\x81\x01\x90a\x03i\x91\x90a&#V[a\x13\xE4V[\0[_\x80a\x03za\x18\xF0V[\x90P\x80`\x06\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[```@Q\x80`@\x01`@R\x80`\r\x81R` \x01\x7FMultichainACL\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RPa\x03\xE5_a\x19\x17V[a\x03\xEF`\x01a\x19\x17V[a\x03\xF8_a\x19\x17V[`@Q` \x01a\x04\x0B\x94\x93\x92\x91\x90a*~V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x90V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x04l\x91\x90a*\xEBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04\x87W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xAB\x91\x90a+.V[a\x04\xECW3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x04\xE3\x91\x90a*\xEBV[`@Q\x80\x91\x03\x90\xFD[\x83_a\x04\xF7\x82a\x19\xE1V[\x90Ps\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xBF\xF3\xAA\xBA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x05F\x91\x90a+hV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05aW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x85\x91\x90a+.V[a\x05\xC6W\x80`@Q\x7F\xB6g\x9C;\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\x81R`\x04\x01a\x05\xBD\x91\x90a+hV[`@Q\x80\x91\x03\x90\xFD[_a\x05\xCFa\x18\xF0V[\x90P\x80`\x05\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x87s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x06\xADW\x86\x863`@Q\x7Ff7\xE3-\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\x81R`\x04\x01a\x06\xA4\x93\x92\x91\x90a+\x81V[`@Q\x80\x91\x03\x90\xFD[\x80`\x04\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x87s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x81T\x80\x92\x91\x90a\x07\x0B\x90a+\xE3V[\x91\x90PUP`\x01\x81`\x05\x01_\x89\x81R` \x01\x90\x81R` \x01_ _\x88s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x80`\x01\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x87s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x80`\x03\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x87s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\t\x18WPa\t\x17\x81`\x04\x01_\x89\x81R` \x01\x90\x81R` \x01_ _\x88s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ Ta\x19\xFAV[[\x15a\t\xBCW`\x01\x81`\x03\x01_\x89\x81R` \x01\x90\x81R` \x01_ _\x88s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x86\x7F\x18\xF8%\xF3\x18\xFF\xA4\xED[\xF3\xF6\xED$\xFDT\xD33x\xB0\xE9\xF1m\xDB7\xC3A\x96\x91\xB2\xE1ef\x87`@Qa\t\xB3\x91\x90a*\xEBV[`@Q\x80\x91\x03\x90\xA2[PPPPPPPV[_\x80\x83\x83\x90P\x03a\t\xD8W_\x90Pa\x0B-V[_a\t\xE1a\x18\xF0V[\x90P_[\x84\x84\x90P\x81\x10\x15a\x0B&W\x81`\x0C\x01_\x87_\x01` \x81\x01\x90a\n\x07\x91\x90a,*V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x87` \x01` \x81\x01\x90a\nT\x91\x90a,*V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x88\x81R` \x01\x90\x81R` \x01_ _\x86\x86\x84\x81\x81\x10a\n\xB0Wa\n\xAFa,UV[[\x90P` \x02\x01` \x81\x01\x90a\n\xC5\x91\x90a,*V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\x0B\x19W_\x92PPPa\x0B-V[\x80\x80`\x01\x01\x91PPa\t\xE5V[P`\x01\x91PP[\x94\x93PPPPV[`\x01a\x0B?a\x1A\x8BV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x0B\x80W`@Q\x7FoOs\x1F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02_a\x0B\x8Ba\x1A\xAFV[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x80a\x0B\xD3WP\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x15[\x15a\x0C\nW`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`\x01\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x82`@Qa\x0C\x99\x91\x90a,\xA4V[`@Q\x80\x91\x03\x90\xA1PPV[a\x0C\xADa\x1A\xD6V[a\x0C\xB6\x82a\x1B\xBCV[a\x0C\xC0\x82\x82a\x1C\xAFV[PPV[_a\x0C\xCDa\x1D\xCDV[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[``_a\r\0a\x18\xF0V[\x90P\x80_\x01_\x84\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\r\x91W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\rHW[PPPPP\x91PP\x91\x90PV[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[``_a\r\xE2a\x18\xF0V[\x90P_a\r\xF1\x87\x87\x87\x87a\x1ETV[\x90P\x81`\x02\x01_\x82\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x0E\x83W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x0E:W[PPPPP\x92PPP\x94\x93PPPPV[``_a\x0E\x9Fa\x18\xF0V[\x90P\x80`\x01\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x0FlW` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x0F#W[PPPPP\x91PP\x92\x91PPV[_\x80a\x0F\x84a\x18\xF0V[\x90P\x80`\x03\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x107\x91\x90a*\xEBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x10RW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10v\x91\x90a+.V[a\x10\xB7W3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x10\xAE\x91\x90a*\xEBV[`@Q\x80\x91\x03\x90\xFD[\x82_a\x10\xC2\x82a\x19\xE1V[\x90Ps\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xBF\xF3\xAA\xBA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x11\x11\x91\x90a+hV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11,W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11P\x91\x90a+.V[a\x11\x91W\x80`@Q\x7F\xB6g\x9C;\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\x81R`\x04\x01a\x11\x88\x91\x90a+hV[`@Q\x80\x91\x03\x90\xFD[_a\x11\x9Aa\x18\xF0V[\x90P\x80`\x08\x01_\x87\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x12;W\x853`@Q\x7F\xA6\xF0M&\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\x81R`\x04\x01a\x122\x92\x91\x90a,\xBDV[`@Q\x80\x91\x03\x90\xFD[\x80`\x07\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x81T\x80\x92\x91\x90a\x12^\x90a+\xE3V[\x91\x90PUP`\x01\x81`\x08\x01_\x88\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x80_\x01_\x87\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x80`\x06\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x13~WPa\x13}\x81`\x07\x01_\x88\x81R` \x01\x90\x81R` \x01_ Ta\x19\xFAV[[\x15a\x13\xDCW`\x01\x81`\x06\x01_\x88\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x85\x7F\x08h\xEC\xA7Q&\xBA\nF\xBB\xEC^\xEF\xA8\x83\xE2\n\x13\xE6\xC7\xD96\xC9\xBFG\xED\x88n.\xB4=:`@Q`@Q\x80\x91\x03\x90\xA2[PPPPPPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x141\x91\x90a*\xEBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x14LW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x14p\x91\x90a+.V[a\x14\xB1W3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x14\xA8\x91\x90a*\xEBV[`@Q\x80\x91\x03\x90\xFD[_\x82\x82\x90P\x03a\x14\xEDW`@Q\x7FW\xCF\xA2\x17\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\n`\xFF\x16\x82\x82\x90P\x11\x15a\x15?W`\n\x82\x82\x90P`@Q\x7F\xA7\xDB'Q\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\x81R`\x04\x01a\x156\x92\x91\x90a-)V[`@Q\x80\x91\x03\x90\xFD[_a\x15Ha\x18\xF0V[\x90P_a\x15W\x86\x86\x86\x86a\x1ETV[\x90P_\x82`\x0B\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x90P\x80_3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x16\x02W\x86\x86\x86\x863`@Q\x7F\x0C\xC6\x95\xAD\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\x81R`\x04\x01a\x15\xF9\x95\x94\x93\x92\x91\x90a.\x13V[`@Q\x80\x91\x03\x90\xFD[\x82`\n\x01_\x83\x81R` \x01\x90\x81R` \x01_ _\x81T\x80\x92\x91\x90a\x16%\x90a+\xE3V[\x91\x90PUP`\x01\x81_3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x82`\x02\x01_\x83\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x82`\t\x01_\x83\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x174WPa\x173\x83`\n\x01_\x84\x81R` \x01\x90\x81R` \x01_ Ta\x19\xFAV[[\x15a\x18\xE7W_\x83`\x0C\x01_\x88_\x01` \x81\x01\x90a\x17Q\x91\x90a,*V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x88` \x01` \x81\x01\x90a\x17\x9E\x91\x90a,*V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x89\x81R` \x01\x90\x81R` \x01_ \x90P_[\x86\x86\x90P\x81\x10\x15a\x18}W`\x01\x82_\x89\x89\x85\x81\x81\x10a\x18\x0CWa\x18\x0Ba,UV[[\x90P` \x02\x01` \x81\x01\x90a\x18!\x91\x90a,*V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x80\x80`\x01\x01\x91PPa\x17\xEAV[P`\x01\x84`\t\x01_\x85\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x87\x7F\x06\xC11U\xCF\xA9\x03C\xCBO\xBA\x18\x0C\xE8\xD3\x83\xB4\xF5j[\xC7\xAA\xC0\xE5\xD8\xF1\x94\xB6Fr\xA5\x1E\x88\x88\x88`@Qa\x18\xDD\x93\x92\x91\x90a._V[`@Q\x80\x91\x03\x90\xA2P[PPPPPPPV[_\x7F\x7Fs:T\xA7\x01\x14\xAD\xDDr\x9B\xCD\x82y2\xA6\xC4\x02\xCC\xF3\x92\t`fY\x17\xBC.f@\xF4\0\x90P\x90V[``_`\x01a\x19%\x84a\x1E\x8CV[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x19CWa\x19Ba&\x98V[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x19uW\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a\x19\xD6W\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a\x19\xCBWa\x19\xCAa.\x8FV[[\x04\x94P_\x85\x03a\x19\x82W[\x81\x93PPPP\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x10\x83_\x1C\x90\x1C\x16\x90P\x91\x90PV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cg\x99\xEFR`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1AYW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1A}\x91\x90a.\xD0V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[_a\x1A\x94a\x1A\xAFV[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a\x1B\x83WP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x1Bja\x1F\xDDV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x1B\xBAW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1C\x19W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1C=\x91\x90a/\x0FV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x1C\xACW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\x1C\xA3\x91\x90a*\xEBV[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a\x1D\x17WP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1D\x14\x91\x90a/NV[`\x01[a\x1DXW\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x1DO\x91\x90a*\xEBV[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a\x1D\xBEW\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a\x1D\xB5\x91\x90a(%V[`@Q\x80\x91\x03\x90\xFD[a\x1D\xC8\x83\x83a 0V[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x1ERW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x84\x84\x84\x84`@Q` \x01a\x1El\x94\x93\x92\x91\x90a/yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x94\x93PPPPV[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a\x1E\xE8Wz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a\x1E\xDEWa\x1E\xDDa.\x8FV[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x1F%Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a\x1F\x1BWa\x1F\x1Aa.\x8FV[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a\x1FTWf#\x86\xF2o\xC1\0\0\x83\x81a\x1FJWa\x1FIa.\x8FV[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a\x1F}Wc\x05\xF5\xE1\0\x83\x81a\x1FsWa\x1Fra.\x8FV[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a\x1F\xA2Wa'\x10\x83\x81a\x1F\x98Wa\x1F\x97a.\x8FV[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a\x1F\xC5W`d\x83\x81a\x1F\xBBWa\x1F\xBAa.\x8FV[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a\x1F\xD4W`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[_a \t\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba \xA2V[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a 9\x82a \xABV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a \x95Wa \x8F\x82\x82a!tV[Pa \x9EV[a \x9Da!\xF4V[[PPV[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a!\x06W\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a \xFD\x91\x90a*\xEBV[`@Q\x80\x91\x03\x90\xFD[\x80a!2\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba \xA2V[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa!\x9D\x91\x90a/\xFBV[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a!\xD5W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a!\xDAV[``\x91P[P\x91P\x91Pa!\xEA\x85\x83\x83a\"0V[\x92PPP\x92\x91PPV[_4\x11\x15a\".W`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[``\x82a\"EWa\"@\x82a\"\xBDV[a\"\xB5V[_\x82Q\x14\x80\x15a\"kWP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a\"\xADW\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a\"\xA4\x91\x90a*\xEBV[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa\"\xB6V[[\x93\x92PPPV[_\x81Q\x11\x15a\"\xCFW\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[a#$\x81a#\x12V[\x81\x14a#.W_\x80\xFD[PV[_\x815\x90Pa#?\x81a#\x1BV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a#ZWa#Ya#\nV[[_a#g\x84\x82\x85\x01a#1V[\x91PP\x92\x91PPV[_\x81\x15\x15\x90P\x91\x90PV[a#\x84\x81a#pV[\x82RPPV[_` \x82\x01\x90Pa#\x9D_\x83\x01\x84a#{V[\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15a#\xDAW\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa#\xBFV[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a#\xFF\x82a#\xA3V[a$\t\x81\x85a#\xADV[\x93Pa$\x19\x81\x85` \x86\x01a#\xBDV[a$\"\x81a#\xE5V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra$E\x81\x84a#\xF5V[\x90P\x92\x91PPV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a$v\x82a$MV[\x90P\x91\x90PV[a$\x86\x81a$lV[\x81\x14a$\x90W_\x80\xFD[PV[_\x815\x90Pa$\xA1\x81a$}V[\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12a$\xC8Wa$\xC7a$\xA7V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a$\xE5Wa$\xE4a$\xABV[[` \x83\x01\x91P\x83`\x01\x82\x02\x83\x01\x11\x15a%\x01Wa%\0a$\xAFV[[\x92P\x92\x90PV[_\x80_\x80``\x85\x87\x03\x12\x15a% Wa%\x1Fa#\nV[[_a%-\x87\x82\x88\x01a#1V[\x94PP` a%>\x87\x82\x88\x01a$\x93V[\x93PP`@\x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a%_Wa%^a#\x0EV[[a%k\x87\x82\x88\x01a$\xB3V[\x92P\x92PP\x92\x95\x91\x94P\x92PV[_\x81\x90P\x91\x90PV[a%\x8B\x81a%yV[\x81\x14a%\x95W_\x80\xFD[PV[_\x815\x90Pa%\xA6\x81a%\x82V[\x92\x91PPV[_\x80\xFD[_`@\x82\x84\x03\x12\x15a%\xC5Wa%\xC4a%\xACV[[\x81\x90P\x92\x91PPV[_\x80\x83`\x1F\x84\x01\x12a%\xE3Wa%\xE2a$\xA7V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a&\0Wa%\xFFa$\xABV[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15a&\x1CWa&\x1Ba$\xAFV[[\x92P\x92\x90PV[_\x80_\x80`\x80\x85\x87\x03\x12\x15a&;Wa&:a#\nV[[_a&H\x87\x82\x88\x01a%\x98V[\x94PP` a&Y\x87\x82\x88\x01a%\xB0V[\x93PP``\x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a&zWa&ya#\x0EV[[a&\x86\x87\x82\x88\x01a%\xCEV[\x92P\x92PP\x92\x95\x91\x94P\x92PV[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[a&\xCE\x82a#\xE5V[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a&\xEDWa&\xECa&\x98V[[\x80`@RPPPV[_a&\xFFa#\x01V[\x90Pa'\x0B\x82\x82a&\xC5V[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a'*Wa')a&\x98V[[a'3\x82a#\xE5V[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_a'`a'[\x84a'\x10V[a&\xF6V[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15a'|Wa'{a&\x94V[[a'\x87\x84\x82\x85a'@V[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12a'\xA3Wa'\xA2a$\xA7V[[\x815a'\xB3\x84\x82` \x86\x01a'NV[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a'\xD2Wa'\xD1a#\nV[[_a'\xDF\x85\x82\x86\x01a$\x93V[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a(\0Wa'\xFFa#\x0EV[[a(\x0C\x85\x82\x86\x01a'\x8FV[\x91PP\x92P\x92\x90PV[a(\x1F\x81a#\x12V[\x82RPPV[_` \x82\x01\x90Pa(8_\x83\x01\x84a(\x16V[\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a(p\x81a$lV[\x82RPPV[_a(\x81\x83\x83a(gV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a(\xA3\x82a(>V[a(\xAD\x81\x85a(HV[\x93Pa(\xB8\x83a(XV[\x80_[\x83\x81\x10\x15a(\xE8W\x81Qa(\xCF\x88\x82a(vV[\x97Pa(\xDA\x83a(\x8DV[\x92PP`\x01\x81\x01\x90Pa(\xBBV[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra)\r\x81\x84a(\x99V[\x90P\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a)+Wa)*a#\nV[[_a)8\x85\x82\x86\x01a#1V[\x92PP` a)I\x85\x82\x86\x01a$\x93V[\x91PP\x92P\x92\x90PV[_\x80_`@\x84\x86\x03\x12\x15a)jWa)ia#\nV[[_a)w\x86\x82\x87\x01a#1V[\x93PP` \x84\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a)\x98Wa)\x97a#\x0EV[[a)\xA4\x86\x82\x87\x01a$\xB3V[\x92P\x92PP\x92P\x92P\x92V[_\x81\x90P\x92\x91PPV[_a)\xC4\x82a#\xA3V[a)\xCE\x81\x85a)\xB0V[\x93Pa)\xDE\x81\x85` \x86\x01a#\xBDV[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_a*\x1E`\x02\x83a)\xB0V[\x91Pa*)\x82a)\xEAV[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_a*h`\x01\x83a)\xB0V[\x91Pa*s\x82a*4V[`\x01\x82\x01\x90P\x91\x90PV[_a*\x89\x82\x87a)\xBAV[\x91Pa*\x94\x82a*\x12V[\x91Pa*\xA0\x82\x86a)\xBAV[\x91Pa*\xAB\x82a*\\V[\x91Pa*\xB7\x82\x85a)\xBAV[\x91Pa*\xC2\x82a*\\V[\x91Pa*\xCE\x82\x84a)\xBAV[\x91P\x81\x90P\x95\x94PPPPPV[a*\xE5\x81a$lV[\x82RPPV[_` \x82\x01\x90Pa*\xFE_\x83\x01\x84a*\xDCV[\x92\x91PPV[a+\r\x81a#pV[\x81\x14a+\x17W_\x80\xFD[PV[_\x81Q\x90Pa+(\x81a+\x04V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a+CWa+Ba#\nV[[_a+P\x84\x82\x85\x01a+\x1AV[\x91PP\x92\x91PPV[a+b\x81a%yV[\x82RPPV[_` \x82\x01\x90Pa+{_\x83\x01\x84a+YV[\x92\x91PPV[_``\x82\x01\x90Pa+\x94_\x83\x01\x86a(\x16V[a+\xA1` \x83\x01\x85a*\xDCV[a+\xAE`@\x83\x01\x84a*\xDCV[\x94\x93PPPPV[\x7FNH{q\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_R`\x11`\x04R`$_\xFD[_a+\xED\x82a%yV[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03a,\x1FWa,\x1Ea+\xB6V[[`\x01\x82\x01\x90P\x91\x90PV[_` \x82\x84\x03\x12\x15a,?Wa,>a#\nV[[_a,L\x84\x82\x85\x01a$\x93V[\x91PP\x92\x91PPV[\x7FNH{q\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_R`2`\x04R`$_\xFD[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[a,\x9E\x81a,\x82V[\x82RPPV[_` \x82\x01\x90Pa,\xB7_\x83\x01\x84a,\x95V[\x92\x91PPV[_`@\x82\x01\x90Pa,\xD0_\x83\x01\x85a(\x16V[a,\xDD` \x83\x01\x84a*\xDCV[\x93\x92PPPV[_`\xFF\x82\x16\x90P\x91\x90PV[_\x81\x90P\x91\x90PV[_a-\x13a-\x0Ea-\t\x84a,\xE4V[a,\xF0V[a%yV[\x90P\x91\x90PV[a-#\x81a,\xF9V[\x82RPPV[_`@\x82\x01\x90Pa-<_\x83\x01\x85a-\x1AV[a-I` \x83\x01\x84a+YV[\x93\x92PPPV[_a-^` \x84\x01\x84a$\x93V[\x90P\x92\x91PPV[`@\x82\x01a-v_\x83\x01\x83a-PV[a-\x82_\x85\x01\x82a(gV[Pa-\x90` \x83\x01\x83a-PV[a-\x9D` \x85\x01\x82a(gV[PPPPV[_\x81\x90P\x91\x90PV[_` \x82\x01\x90P\x91\x90PV[_a-\xC3\x83\x85a(HV[\x93Pa-\xCE\x82a-\xA3V[\x80_[\x85\x81\x10\x15a.\x06Wa-\xE3\x82\x84a-PV[a-\xED\x88\x82a(vV[\x97Pa-\xF8\x83a-\xACV[\x92PP`\x01\x81\x01\x90Pa-\xD1V[P\x85\x92PPP\x93\x92PPPV[_`\xA0\x82\x01\x90Pa.&_\x83\x01\x88a+YV[a.3` \x83\x01\x87a-fV[\x81\x81\x03``\x83\x01Ra.F\x81\x85\x87a-\xB8V[\x90Pa.U`\x80\x83\x01\x84a*\xDCV[\x96\x95PPPPPPV[_``\x82\x01\x90Pa.r_\x83\x01\x86a-fV[\x81\x81\x03`@\x83\x01Ra.\x85\x81\x84\x86a-\xB8V[\x90P\x94\x93PPPPV[\x7FNH{q\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_R`\x12`\x04R`$_\xFD[_\x81Q\x90Pa.\xCA\x81a%\x82V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a.\xE5Wa.\xE4a#\nV[[_a.\xF2\x84\x82\x85\x01a.\xBCV[\x91PP\x92\x91PPV[_\x81Q\x90Pa/\t\x81a$}V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a/$Wa/#a#\nV[[_a/1\x84\x82\x85\x01a.\xFBV[\x91PP\x92\x91PPV[_\x81Q\x90Pa/H\x81a#\x1BV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a/cWa/ba#\nV[[_a/p\x84\x82\x85\x01a/:V[\x91PP\x92\x91PPV[_`\x80\x82\x01\x90Pa/\x8C_\x83\x01\x87a+YV[a/\x99` \x83\x01\x86a-fV[\x81\x81\x03``\x83\x01Ra/\xAC\x81\x84\x86a-\xB8V[\x90P\x95\x94PPPPPV[_\x81Q\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[_a/\xD5\x82a/\xB7V[a/\xDF\x81\x85a/\xC1V[\x93Pa/\xEF\x81\x85` \x86\x01a#\xBDV[\x80\x84\x01\x91PP\x92\x91PPV[_a0\x06\x82\x84a/\xCBV[\x91P\x81\x90P\x92\x91PPV", + b"`\xA0`@R0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81RP4\x80\x15b\0\0CW_\x80\xFD[Pb\0\0Tb\0\0Z` \x1B` \x1CV[b\0\x01\xC4V[_b\0\0kb\0\x01^` \x1B` \x1CV[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15b\0\0\xB6W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14b\0\x01[Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Qb\0\x01R\x91\x90b\0\x01\xA9V[`@Q\x80\x91\x03\x90\xA1[PV[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[b\0\x01\xA3\x81b\0\x01\x85V[\x82RPPV[_` \x82\x01\x90Pb\0\x01\xBE_\x83\x01\x84b\0\x01\x98V[\x92\x91PPV[`\x80Qa#1b\0\x01\xEB_9_\x81\x81a\x11m\x01R\x81\x81a\x11\xC2\x01Ra\x14d\x01Ra#1_\xF3\xFE`\x80`@R`\x046\x10a\0\x9BW_5`\xE0\x1C\x80cR\xD1\x90-\x11a\0cW\x80cR\xD1\x90-\x14a\x01_W\x80c\x97\xC4\x9A@\x14a\x01\x89W\x80c\xAD<\xB1\xCC\x14a\x01\xC5W\x80c\xAE\x951\x86\x14a\x01\xEFW\x80c\xC6R\x8Fi\x14a\x02+W\x80c\xD9\x07$\xB5\x14a\x02gWa\0\x9BV[\x80c\x06 2m\x14a\0\x9FW\x80c\r\x8En,\x14a\0\xDBW\x80c)J\x87\x05\x14a\x01\x05W\x80c9\xF78\x10\x14a\x01-W\x80cO\x1E\xF2\x86\x14a\x01CW[_\x80\xFD[4\x80\x15a\0\xAAW_\x80\xFD[Pa\0\xC5`\x04\x806\x03\x81\x01\x90a\0\xC0\x91\x90a\x19\xA2V[a\x02\x8FV[`@Qa\0\xD2\x91\x90a\x19\xE7V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\0\xE6W_\x80\xFD[Pa\0\xEFa\x02\xC3V[`@Qa\0\xFC\x91\x90a\x1A\x8AV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x10W_\x80\xFD[Pa\x01+`\x04\x806\x03\x81\x01\x90a\x01&\x91\x90a\x1BeV[a\x03>V[\0[4\x80\x15a\x018W_\x80\xFD[Pa\x01Aa\x07\x87V[\0[a\x01]`\x04\x806\x03\x81\x01\x90a\x01X\x91\x90a\x1C\xFEV[a\x08\xF7V[\0[4\x80\x15a\x01jW_\x80\xFD[Pa\x01sa\t\x16V[`@Qa\x01\x80\x91\x90a\x1DgV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x94W_\x80\xFD[Pa\x01\xAF`\x04\x806\x03\x81\x01\x90a\x01\xAA\x91\x90a\x19\xA2V[a\tGV[`@Qa\x01\xBC\x91\x90a\x1E7V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xD0W_\x80\xFD[Pa\x01\xD9a\t\xF1V[`@Qa\x01\xE6\x91\x90a\x1A\x8AV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xFAW_\x80\xFD[Pa\x02\x15`\x04\x806\x03\x81\x01\x90a\x02\x10\x91\x90a\x1EWV[a\n*V[`@Qa\x02\"\x91\x90a\x1E7V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x026W_\x80\xFD[Pa\x02Q`\x04\x806\x03\x81\x01\x90a\x02L\x91\x90a\x1EWV[a\n\xE3V[`@Qa\x02^\x91\x90a\x19\xE7V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02rW_\x80\xFD[Pa\x02\x8D`\x04\x806\x03\x81\x01\x90a\x02\x88\x91\x90a\x1E\x95V[a\x0B&V[\0[_\x80a\x02\x99a\x0FSV[\x90P\x80`\x03\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[```@Q\x80`@\x01`@R\x80`\r\x81R` \x01\x7FMultichainACL\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RPa\x03\x04_a\x0FzV[a\x03\x0E`\x01a\x0FzV[a\x03\x17_a\x0FzV[`@Q` \x01a\x03*\x94\x93\x92\x91\x90a\x1F\xC0V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x90V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x03\x8B\x91\x90a -V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x03\xA6W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\xCA\x91\x90a pV[a\x04\x0BW3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x04\x02\x91\x90a -V[`@Q\x80\x91\x03\x90\xFD[\x83_a\x04\x16\x82a\x10DV[\x90Ps\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xBF\xF3\xAA\xBA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x04e\x91\x90a \xB3V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04\x80W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xA4\x91\x90a pV[a\x04\xE5W\x80`@Q\x7F\xB6g\x9C;\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\x81R`\x04\x01a\x04\xDC\x91\x90a \xB3V[`@Q\x80\x91\x03\x90\xFD[_a\x04\xEEa\x0FSV[\x90P_a\x04\xFB\x88\x88a\x10]V[\x90P_\x82`\x05\x01_\x83\x81R` \x01\x90\x81R` \x01_ T\x03a\x051W`\x01\x82`\x05\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP[\x81_\x01_\x82\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x05\xD1W\x87\x873`@Q\x7Ff7\xE3-\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\x81R`\x04\x01a\x05\xC8\x93\x92\x91\x90a \xCCV[`@Q\x80\x91\x03\x90\xFD[\x81`\x01\x01_\x82\x81R` \x01\x90\x81R` \x01_ _\x81T\x80\x92\x91\x90a\x05\xF4\x90a!.V[\x91\x90PUP`\x01\x82_\x01_\x83\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x81`\x02\x01_\x82\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x81`\x03\x01_\x82\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x07\x14WPa\x07\x13\x82`\x01\x01_\x83\x81R` \x01\x90\x81R` \x01_ Ta\x10\x8FV[[\x15a\x07}W`\x01\x82`\x03\x01_\x83\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x87\x7F\x18\xF8%\xF3\x18\xFF\xA4\xED[\xF3\xF6\xED$\xFDT\xD33x\xB0\xE9\xF1m\xDB7\xC3A\x96\x91\xB2\xE1ef\x88`@Qa\x07t\x91\x90a -V[`@Q\x80\x91\x03\x90\xA2[PPPPPPPPV[`\x01a\x07\x91a\x11 V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x07\xD2W`@Q\x7FoOs\x1F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02_a\x07\xDDa\x11DV[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x80a\x08%WP\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x15[\x15a\x08\\W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`\x01\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x82`@Qa\x08\xEB\x91\x90a!\x97V[`@Q\x80\x91\x03\x90\xA1PPV[a\x08\xFFa\x11kV[a\t\x08\x82a\x12QV[a\t\x12\x82\x82a\x13DV[PPV[_a\t\x1Fa\x14bV[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[``_a\tRa\x0FSV[\x90P\x80`\x02\x01_\x84\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\t\xE4W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\t\x9BW[PPPPP\x91PP\x91\x90PV[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[``_a\n5a\x0FSV[\x90P_a\nB\x85\x85a\x10]V[\x90P\x81`\x02\x01_\x82\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\n\xD4W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\n\x8BW[PPPPP\x92PPP\x92\x91PPV[_\x80a\n\xEDa\x0FSV[\x90P_a\n\xFA\x85\x85a\x10]V[\x90P\x81`\x03\x01_\x82\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x92PPP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0Bs\x91\x90a -V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0B\x8EW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0B\xB2\x91\x90a pV[a\x0B\xF3W3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x0B\xEA\x91\x90a -V[`@Q\x80\x91\x03\x90\xFD[\x82_a\x0B\xFE\x82a\x10DV[\x90Ps\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xBF\xF3\xAA\xBA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0CM\x91\x90a \xB3V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0ChW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0C\x8C\x91\x90a pV[a\x0C\xCDW\x80`@Q\x7F\xB6g\x9C;\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\x81R`\x04\x01a\x0C\xC4\x91\x90a \xB3V[`@Q\x80\x91\x03\x90\xFD[_a\x0C\xD6a\x0FSV[\x90P_\x81`\x05\x01_\x88\x81R` \x01\x90\x81R` \x01_ T\x03a\r\x0CW`\x01\x81`\x05\x01_\x88\x81R` \x01\x90\x81R` \x01_ \x81\x90UP[\x80_\x01_\x87\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\r\xAAW\x853`@Q\x7F\xA6\xF0M&\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\x81R`\x04\x01a\r\xA1\x92\x91\x90a!\xB0V[`@Q\x80\x91\x03\x90\xFD[\x80`\x01\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x81T\x80\x92\x91\x90a\r\xCD\x90a!.V[\x91\x90PUP`\x01\x81_\x01_\x88\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x80`\x02\x01_\x87\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x80`\x03\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x0E\xEDWPa\x0E\xEC\x81`\x01\x01_\x88\x81R` \x01\x90\x81R` \x01_ Ta\x10\x8FV[[\x15a\x0FKW`\x01\x81`\x03\x01_\x88\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x85\x7F\x08h\xEC\xA7Q&\xBA\nF\xBB\xEC^\xEF\xA8\x83\xE2\n\x13\xE6\xC7\xD96\xC9\xBFG\xED\x88n.\xB4=:`@Q`@Q\x80\x91\x03\x90\xA2[PPPPPPV[_\x7F\x7Fs:T\xA7\x01\x14\xAD\xDDr\x9B\xCD\x82y2\xA6\xC4\x02\xCC\xF3\x92\t`fY\x17\xBC.f@\xF4\0\x90P\x90V[``_`\x01a\x0F\x88\x84a\x14\xE9V[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0F\xA6Wa\x0F\xA5a\x1B\xDAV[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0F\xD8W\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a\x109W\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a\x10.Wa\x10-a!\xD7V[[\x04\x94P_\x85\x03a\x0F\xE5W[\x81\x93PPPP\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x10\x83_\x1C\x90\x1C\x16\x90P\x91\x90PV[_\x82\x82`@Q` \x01a\x10q\x92\x91\x90a!\xB0V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x92\x91PPV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cg\x99\xEFR`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x10\xEEW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11\x12\x91\x90a\".V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[_a\x11)a\x11DV[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a\x12\x18WP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x11\xFFa\x16:V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x12OW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x12\xAEW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x12\xD2\x91\x90a\"mV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x13AW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\x138\x91\x90a -V[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a\x13\xACWP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13\xA9\x91\x90a\"\xACV[`\x01[a\x13\xEDW\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x13\xE4\x91\x90a -V[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a\x14SW\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a\x14J\x91\x90a\x1DgV[`@Q\x80\x91\x03\x90\xFD[a\x14]\x83\x83a\x16\x8DV[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x14\xE7W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a\x15EWz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a\x15;Wa\x15:a!\xD7V[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x15\x82Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a\x15xWa\x15wa!\xD7V[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a\x15\xB1Wf#\x86\xF2o\xC1\0\0\x83\x81a\x15\xA7Wa\x15\xA6a!\xD7V[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a\x15\xDAWc\x05\xF5\xE1\0\x83\x81a\x15\xD0Wa\x15\xCFa!\xD7V[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a\x15\xFFWa'\x10\x83\x81a\x15\xF5Wa\x15\xF4a!\xD7V[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a\x16\"W`d\x83\x81a\x16\x18Wa\x16\x17a!\xD7V[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a\x161W`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[_a\x16f\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba\x16\xFFV[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a\x16\x96\x82a\x17\x08V[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a\x16\xF2Wa\x16\xEC\x82\x82a\x17\xD1V[Pa\x16\xFBV[a\x16\xFAa\x18QV[[PPV[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a\x17cW\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x17Z\x91\x90a -V[`@Q\x80\x91\x03\x90\xFD[\x80a\x17\x8F\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba\x16\xFFV[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa\x17\xFA\x91\x90a#\x1BV[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a\x182W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a\x187V[``\x91P[P\x91P\x91Pa\x18G\x85\x83\x83a\x18\x8DV[\x92PPP\x92\x91PPV[_4\x11\x15a\x18\x8BW`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[``\x82a\x18\xA2Wa\x18\x9D\x82a\x19\x1AV[a\x19\x12V[_\x82Q\x14\x80\x15a\x18\xC8WP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a\x19\nW\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a\x19\x01\x91\x90a -V[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa\x19\x13V[[\x93\x92PPPV[_\x81Q\x11\x15a\x19,W\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[a\x19\x81\x81a\x19oV[\x81\x14a\x19\x8BW_\x80\xFD[PV[_\x815\x90Pa\x19\x9C\x81a\x19xV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x19\xB7Wa\x19\xB6a\x19gV[[_a\x19\xC4\x84\x82\x85\x01a\x19\x8EV[\x91PP\x92\x91PPV[_\x81\x15\x15\x90P\x91\x90PV[a\x19\xE1\x81a\x19\xCDV[\x82RPPV[_` \x82\x01\x90Pa\x19\xFA_\x83\x01\x84a\x19\xD8V[\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15a\x1A7W\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa\x1A\x1CV[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a\x1A\\\x82a\x1A\0V[a\x1Af\x81\x85a\x1A\nV[\x93Pa\x1Av\x81\x85` \x86\x01a\x1A\x1AV[a\x1A\x7F\x81a\x1ABV[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x1A\xA2\x81\x84a\x1ARV[\x90P\x92\x91PPV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a\x1A\xD3\x82a\x1A\xAAV[\x90P\x91\x90PV[a\x1A\xE3\x81a\x1A\xC9V[\x81\x14a\x1A\xEDW_\x80\xFD[PV[_\x815\x90Pa\x1A\xFE\x81a\x1A\xDAV[\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12a\x1B%Wa\x1B$a\x1B\x04V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1BBWa\x1BAa\x1B\x08V[[` \x83\x01\x91P\x83`\x01\x82\x02\x83\x01\x11\x15a\x1B^Wa\x1B]a\x1B\x0CV[[\x92P\x92\x90PV[_\x80_\x80``\x85\x87\x03\x12\x15a\x1B}Wa\x1B|a\x19gV[[_a\x1B\x8A\x87\x82\x88\x01a\x19\x8EV[\x94PP` a\x1B\x9B\x87\x82\x88\x01a\x1A\xF0V[\x93PP`@\x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1B\xBCWa\x1B\xBBa\x19kV[[a\x1B\xC8\x87\x82\x88\x01a\x1B\x10V[\x92P\x92PP\x92\x95\x91\x94P\x92PV[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[a\x1C\x10\x82a\x1ABV[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1C/Wa\x1C.a\x1B\xDAV[[\x80`@RPPPV[_a\x1CAa\x19^V[\x90Pa\x1CM\x82\x82a\x1C\x07V[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a\x1ClWa\x1Cka\x1B\xDAV[[a\x1Cu\x82a\x1ABV[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_a\x1C\xA2a\x1C\x9D\x84a\x1CRV[a\x1C8V[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15a\x1C\xBEWa\x1C\xBDa\x1B\xD6V[[a\x1C\xC9\x84\x82\x85a\x1C\x82V[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12a\x1C\xE5Wa\x1C\xE4a\x1B\x04V[[\x815a\x1C\xF5\x84\x82` \x86\x01a\x1C\x90V[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a\x1D\x14Wa\x1D\x13a\x19gV[[_a\x1D!\x85\x82\x86\x01a\x1A\xF0V[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1DBWa\x1DAa\x19kV[[a\x1DN\x85\x82\x86\x01a\x1C\xD1V[\x91PP\x92P\x92\x90PV[a\x1Da\x81a\x19oV[\x82RPPV[_` \x82\x01\x90Pa\x1Dz_\x83\x01\x84a\x1DXV[\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a\x1D\xB2\x81a\x1A\xC9V[\x82RPPV[_a\x1D\xC3\x83\x83a\x1D\xA9V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a\x1D\xE5\x82a\x1D\x80V[a\x1D\xEF\x81\x85a\x1D\x8AV[\x93Pa\x1D\xFA\x83a\x1D\x9AV[\x80_[\x83\x81\x10\x15a\x1E*W\x81Qa\x1E\x11\x88\x82a\x1D\xB8V[\x97Pa\x1E\x1C\x83a\x1D\xCFV[\x92PP`\x01\x81\x01\x90Pa\x1D\xFDV[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x1EO\x81\x84a\x1D\xDBV[\x90P\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a\x1EmWa\x1Ela\x19gV[[_a\x1Ez\x85\x82\x86\x01a\x19\x8EV[\x92PP` a\x1E\x8B\x85\x82\x86\x01a\x1A\xF0V[\x91PP\x92P\x92\x90PV[_\x80_`@\x84\x86\x03\x12\x15a\x1E\xACWa\x1E\xABa\x19gV[[_a\x1E\xB9\x86\x82\x87\x01a\x19\x8EV[\x93PP` \x84\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1E\xDAWa\x1E\xD9a\x19kV[[a\x1E\xE6\x86\x82\x87\x01a\x1B\x10V[\x92P\x92PP\x92P\x92P\x92V[_\x81\x90P\x92\x91PPV[_a\x1F\x06\x82a\x1A\0V[a\x1F\x10\x81\x85a\x1E\xF2V[\x93Pa\x1F \x81\x85` \x86\x01a\x1A\x1AV[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_a\x1F``\x02\x83a\x1E\xF2V[\x91Pa\x1Fk\x82a\x1F,V[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_a\x1F\xAA`\x01\x83a\x1E\xF2V[\x91Pa\x1F\xB5\x82a\x1FvV[`\x01\x82\x01\x90P\x91\x90PV[_a\x1F\xCB\x82\x87a\x1E\xFCV[\x91Pa\x1F\xD6\x82a\x1FTV[\x91Pa\x1F\xE2\x82\x86a\x1E\xFCV[\x91Pa\x1F\xED\x82a\x1F\x9EV[\x91Pa\x1F\xF9\x82\x85a\x1E\xFCV[\x91Pa \x04\x82a\x1F\x9EV[\x91Pa \x10\x82\x84a\x1E\xFCV[\x91P\x81\x90P\x95\x94PPPPPV[a '\x81a\x1A\xC9V[\x82RPPV[_` \x82\x01\x90Pa @_\x83\x01\x84a \x1EV[\x92\x91PPV[a O\x81a\x19\xCDV[\x81\x14a YW_\x80\xFD[PV[_\x81Q\x90Pa j\x81a FV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a \x85Wa \x84a\x19gV[[_a \x92\x84\x82\x85\x01a \\V[\x91PP\x92\x91PPV[_\x81\x90P\x91\x90PV[a \xAD\x81a \x9BV[\x82RPPV[_` \x82\x01\x90Pa \xC6_\x83\x01\x84a \xA4V[\x92\x91PPV[_``\x82\x01\x90Pa \xDF_\x83\x01\x86a\x1DXV[a \xEC` \x83\x01\x85a \x1EV[a \xF9`@\x83\x01\x84a \x1EV[\x94\x93PPPPV[\x7FNH{q\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_R`\x11`\x04R`$_\xFD[_a!8\x82a \x9BV[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03a!jWa!ia!\x01V[[`\x01\x82\x01\x90P\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[a!\x91\x81a!uV[\x82RPPV[_` \x82\x01\x90Pa!\xAA_\x83\x01\x84a!\x88V[\x92\x91PPV[_`@\x82\x01\x90Pa!\xC3_\x83\x01\x85a\x1DXV[a!\xD0` \x83\x01\x84a \x1EV[\x93\x92PPPV[\x7FNH{q\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_R`\x12`\x04R`$_\xFD[a\"\r\x81a \x9BV[\x81\x14a\"\x17W_\x80\xFD[PV[_\x81Q\x90Pa\"(\x81a\"\x04V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\"CWa\"Ba\x19gV[[_a\"P\x84\x82\x85\x01a\"\x1AV[\x91PP\x92\x91PPV[_\x81Q\x90Pa\"g\x81a\x1A\xDAV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\"\x82Wa\"\x81a\x19gV[[_a\"\x8F\x84\x82\x85\x01a\"YV[\x91PP\x92\x91PPV[_\x81Q\x90Pa\"\xA6\x81a\x19xV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\"\xC1Wa\"\xC0a\x19gV[[_a\"\xCE\x84\x82\x85\x01a\"\x98V[\x91PP\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[_a\"\xF5\x82a\"\xD7V[a\"\xFF\x81\x85a\"\xE1V[\x93Pa#\x0F\x81\x85` \x86\x01a\x1A\x1AV[\x80\x84\x01\x91PP\x92\x91PPV[_a#&\x82\x84a\"\xEBV[\x91P\x81\x90P\x92\x91PPV", ); /// The runtime bytecode of the contract, as deployed on the network. /// /// ```text - ///0x6080604052600436106100dc575f3560e01c806397c49a401161007e578063ae95318611610058578063ae953186146102a8578063c6528f69146102e4578063d90724b514610320578063f4c5f49314610348576100dc565b806397c49a4014610206578063ad3cb1cc14610242578063ad8b0b2b1461026c576100dc565b80632b13591c116100ba5780632b13591c1461016e57806339f73810146101aa5780634f1ef286146101c057806352d1902d146101dc576100dc565b80630620326d146100e05780630d8e6e2c1461011c578063294a870514610146575b5f80fd5b3480156100eb575f80fd5b5061010660048036038101906101019190612345565b610370565b604051610113919061238a565b60405180910390f35b348015610127575f80fd5b506101306103a4565b60405161013d919061242d565b60405180910390f35b348015610151575f80fd5b5061016c60048036038101906101679190612508565b61041f565b005b348015610179575f80fd5b50610194600480360381019061018f9190612623565b6109c5565b6040516101a1919061238a565b60405180910390f35b3480156101b5575f80fd5b506101be610b35565b005b6101da60048036038101906101d591906127bc565b610ca5565b005b3480156101e7575f80fd5b506101f0610cc4565b6040516101fd9190612825565b60405180910390f35b348015610211575f80fd5b5061022c60048036038101906102279190612345565b610cf5565b60405161023991906128f5565b60405180910390f35b34801561024d575f80fd5b50610256610d9e565b604051610263919061242d565b60405180910390f35b348015610277575f80fd5b50610292600480360381019061028d9190612623565b610dd7565b60405161029f91906128f5565b60405180910390f35b3480156102b3575f80fd5b506102ce60048036038101906102c99190612915565b610e94565b6040516102db91906128f5565b60405180910390f35b3480156102ef575f80fd5b5061030a60048036038101906103059190612915565b610f7a565b604051610317919061238a565b60405180910390f35b34801561032b575f80fd5b5061034660048036038101906103419190612953565b610fea565b005b348015610353575f80fd5b5061036e60048036038101906103699190612623565b6113e4565b005b5f8061037a6118f0565b9050806006015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b60606040518060400160405280600d81526020017f4d756c7469636861696e41434c000000000000000000000000000000000000008152506103e55f611917565b6103ef6001611917565b6103f85f611917565b60405160200161040b9493929190612a7e565b604051602081830303815290604052905090565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b815260040161046c9190612aeb565b602060405180830381865afa158015610487573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ab9190612b2e565b6104ec57336040517f52d725f50000000000000000000000000000000000000000000000000000000081526004016104e39190612aeb565b60405180910390fd5b835f6104f7826119e1565b905073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663bff3aaba826040518263ffffffff1660e01b81526004016105469190612b68565b602060405180830381865afa158015610561573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105859190612b2e565b6105c657806040517fb6679c3b0000000000000000000000000000000000000000000000000000000081526004016105bd9190612b68565b60405180910390fd5b5f6105cf6118f0565b9050806005015f8881526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156106ad578686336040517f6637e32d0000000000000000000000000000000000000000000000000000000081526004016106a493929190612b81565b60405180910390fd5b806004015f8881526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061070b90612be3565b91905055506001816005015f8981526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806001015f8881526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003015f8881526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156109185750610917816004015f8981526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546119fa565b5b156109bc576001816003015f8981526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550867f18f825f318ffa4ed5bf3f6ed24fd54d33378b0e9f16ddb37c3419691b2e16566876040516109b39190612aeb565b60405180910390a25b50505050505050565b5f8083839050036109d8575f9050610b2d565b5f6109e16118f0565b90505f5b84849050811015610b265781600c015f875f016020810190610a079190612c2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f876020016020810190610a549190612c2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8881526020019081526020015f205f868684818110610ab057610aaf612c55565b5b9050602002016020810190610ac59190612c2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610b19575f92505050610b2d565b80806001019150506109e5565b5060019150505b949350505050565b6001610b3f611a8b565b67ffffffffffffffff1614610b80576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f610b8b611aaf565b9050805f0160089054906101000a900460ff1680610bd357508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b15610c0a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff0219169083151502179055505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d282604051610c999190612ca4565b60405180910390a15050565b610cad611ad6565b610cb682611bbc565b610cc08282611caf565b5050565b5f610ccd611dcd565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b60605f610d006118f0565b9050805f015f8481526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610d9157602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610d48575b5050505050915050919050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60605f610de26118f0565b90505f610df187878787611e54565b9050816002015f8281526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610e8357602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610e3a575b505050505092505050949350505050565b60605f610e9f6118f0565b9050806001015f8581526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610f6c57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f23575b505050505091505092915050565b5f80610f846118f0565b9050806003015f8581526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1691505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b81526004016110379190612aeb565b602060405180830381865afa158015611052573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110769190612b2e565b6110b757336040517f52d725f50000000000000000000000000000000000000000000000000000000081526004016110ae9190612aeb565b60405180910390fd5b825f6110c2826119e1565b905073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663bff3aaba826040518263ffffffff1660e01b81526004016111119190612b68565b602060405180830381865afa15801561112c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111509190612b2e565b61119157806040517fb6679c3b0000000000000000000000000000000000000000000000000000000081526004016111889190612b68565b60405180910390fd5b5f61119a6118f0565b9050806008015f8781526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561123b5785336040517fa6f04d26000000000000000000000000000000000000000000000000000000008152600401611232929190612cbd565b60405180910390fd5b806007015f8781526020019081526020015f205f81548092919061125e90612be3565b91905055506001816008015f8881526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550805f015f8781526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806006015f8781526020019081526020015f205f9054906101000a900460ff1615801561137e575061137d816007015f8881526020019081526020015f20546119fa565b5b156113dc576001816006015f8881526020019081526020015f205f6101000a81548160ff021916908315150217905550857f0868eca75126ba0a46bbec5eefa883e20a13e6c7d936c9bf47ed886e2eb43d3a60405160405180910390a25b505050505050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b81526004016114319190612aeb565b602060405180830381865afa15801561144c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114709190612b2e565b6114b157336040517f52d725f50000000000000000000000000000000000000000000000000000000081526004016114a89190612aeb565b60405180910390fd5b5f82829050036114ed576040517f57cfa21700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a60ff1682829050111561153f57600a828290506040517fa7db2751000000000000000000000000000000000000000000000000000000008152600401611536929190612d29565b60405180910390fd5b5f6115486118f0565b90505f61155786868686611e54565b90505f82600b015f8381526020019081526020015f209050805f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156116025786868686336040517f0cc695ad0000000000000000000000000000000000000000000000000000000081526004016115f9959493929190612e13565b60405180910390fd5b82600a015f8381526020019081526020015f205f81548092919061162590612be3565b91905055506001815f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550826002015f8381526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826009015f8381526020019081526020015f205f9054906101000a900460ff16158015611734575061173383600a015f8481526020019081526020015f20546119fa565b5b156118e7575f83600c015f885f0160208101906117519190612c2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f88602001602081019061179e9190612c2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8981526020019081526020015f2090505f5b8686905081101561187d576001825f89898581811061180c5761180b612c55565b5b90506020020160208101906118219190612c2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506117ea565b506001846009015f8581526020019081526020015f205f6101000a81548160ff021916908315150217905550877f06c13155cfa90343cb4fba180ce8d383b4f56a5bc7aac0e5d8f194b64672a51e8888886040516118dd93929190612e5f565b60405180910390a2505b50505050505050565b5f7f7f733a54a70114addd729bcd827932a6c402ccf3920960665917bc2e6640f400905090565b60605f600161192584611e8c565b0190505f8167ffffffffffffffff81111561194357611942612698565b5b6040519080825280601f01601f1916602001820160405280156119755781602001600182028036833780820191505090505b5090505f82602001820190505b6001156119d6578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816119cb576119ca612e8f565b5b0494505f8503611982575b819350505050919050565b5f67ffffffffffffffff6010835f1c901c169050919050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16636799ef526040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a59573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a7d9190612ed0565b905080831015915050919050565b5f611a94611aaf565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480611b8357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611b6a611fdd565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611bba576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c3d9190612f0f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cac57336040517f0e56cf3d000000000000000000000000000000000000000000000000000000008152600401611ca39190612aeb565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611d1757506040513d601f19601f82011682018060405250810190611d149190612f4e565b60015b611d5857816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611d4f9190612aeb565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b8114611dbe57806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401611db59190612825565b60405180910390fd5b611dc88383612030565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611e52576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f84848484604051602001611e6c9493929190612f79565b604051602081830303815290604052805190602001209050949350505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611ee8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611ede57611edd612e8f565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611f25576d04ee2d6d415b85acef81000000008381611f1b57611f1a612e8f565b5b0492506020810190505b662386f26fc100008310611f5457662386f26fc100008381611f4a57611f49612e8f565b5b0492506010810190505b6305f5e1008310611f7d576305f5e1008381611f7357611f72612e8f565b5b0492506008810190505b6127108310611fa2576127108381611f9857611f97612e8f565b5b0492506004810190505b60648310611fc55760648381611fbb57611fba612e8f565b5b0492506002810190505b600a8310611fd4576001810190505b80915050919050565b5f6120097f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6120a2565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612039826120ab565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156120955761208f8282612174565b5061209e565b61209d6121f4565b5b5050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361210657806040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016120fd9190612aeb565b60405180910390fd5b806121327f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6120a2565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff168460405161219d9190612ffb565b5f60405180830381855af49150503d805f81146121d5576040519150601f19603f3d011682016040523d82523d5f602084013e6121da565b606091505b50915091506121ea858383612230565b9250505092915050565b5f34111561222e576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60608261224557612240826122bd565b6122b5565b5f825114801561226b57505f8473ffffffffffffffffffffffffffffffffffffffff163b145b156122ad57836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016122a49190612aeb565b60405180910390fd5b8190506122b6565b5b9392505050565b5f815111156122cf5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61232481612312565b811461232e575f80fd5b50565b5f8135905061233f8161231b565b92915050565b5f6020828403121561235a5761235961230a565b5b5f61236784828501612331565b91505092915050565b5f8115159050919050565b61238481612370565b82525050565b5f60208201905061239d5f83018461237b565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156123da5780820151818401526020810190506123bf565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6123ff826123a3565b61240981856123ad565b93506124198185602086016123bd565b612422816123e5565b840191505092915050565b5f6020820190508181035f83015261244581846123f5565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124768261244d565b9050919050565b6124868161246c565b8114612490575f80fd5b50565b5f813590506124a18161247d565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126124c8576124c76124a7565b5b8235905067ffffffffffffffff8111156124e5576124e46124ab565b5b602083019150836001820283011115612501576125006124af565b5b9250929050565b5f805f80606085870312156125205761251f61230a565b5b5f61252d87828801612331565b945050602061253e87828801612493565b935050604085013567ffffffffffffffff81111561255f5761255e61230e565b5b61256b878288016124b3565b925092505092959194509250565b5f819050919050565b61258b81612579565b8114612595575f80fd5b50565b5f813590506125a681612582565b92915050565b5f80fd5b5f604082840312156125c5576125c46125ac565b5b81905092915050565b5f8083601f8401126125e3576125e26124a7565b5b8235905067ffffffffffffffff811115612600576125ff6124ab565b5b60208301915083602082028301111561261c5761261b6124af565b5b9250929050565b5f805f806080858703121561263b5761263a61230a565b5b5f61264887828801612598565b9450506020612659878288016125b0565b935050606085013567ffffffffffffffff81111561267a5761267961230e565b5b612686878288016125ce565b925092505092959194509250565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6126ce826123e5565b810181811067ffffffffffffffff821117156126ed576126ec612698565b5b80604052505050565b5f6126ff612301565b905061270b82826126c5565b919050565b5f67ffffffffffffffff82111561272a57612729612698565b5b612733826123e5565b9050602081019050919050565b828183375f83830152505050565b5f61276061275b84612710565b6126f6565b90508281526020810184848401111561277c5761277b612694565b5b612787848285612740565b509392505050565b5f82601f8301126127a3576127a26124a7565b5b81356127b384826020860161274e565b91505092915050565b5f80604083850312156127d2576127d161230a565b5b5f6127df85828601612493565b925050602083013567ffffffffffffffff811115612800576127ff61230e565b5b61280c8582860161278f565b9150509250929050565b61281f81612312565b82525050565b5f6020820190506128385f830184612816565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6128708161246c565b82525050565b5f6128818383612867565b60208301905092915050565b5f602082019050919050565b5f6128a38261283e565b6128ad8185612848565b93506128b883612858565b805f5b838110156128e85781516128cf8882612876565b97506128da8361288d565b9250506001810190506128bb565b5085935050505092915050565b5f6020820190508181035f83015261290d8184612899565b905092915050565b5f806040838503121561292b5761292a61230a565b5b5f61293885828601612331565b925050602061294985828601612493565b9150509250929050565b5f805f6040848603121561296a5761296961230a565b5b5f61297786828701612331565b935050602084013567ffffffffffffffff8111156129985761299761230e565b5b6129a4868287016124b3565b92509250509250925092565b5f81905092915050565b5f6129c4826123a3565b6129ce81856129b0565b93506129de8185602086016123bd565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f612a1e6002836129b0565b9150612a29826129ea565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f612a686001836129b0565b9150612a7382612a34565b600182019050919050565b5f612a8982876129ba565b9150612a9482612a12565b9150612aa082866129ba565b9150612aab82612a5c565b9150612ab782856129ba565b9150612ac282612a5c565b9150612ace82846129ba565b915081905095945050505050565b612ae58161246c565b82525050565b5f602082019050612afe5f830184612adc565b92915050565b612b0d81612370565b8114612b17575f80fd5b50565b5f81519050612b2881612b04565b92915050565b5f60208284031215612b4357612b4261230a565b5b5f612b5084828501612b1a565b91505092915050565b612b6281612579565b82525050565b5f602082019050612b7b5f830184612b59565b92915050565b5f606082019050612b945f830186612816565b612ba16020830185612adc565b612bae6040830184612adc565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612bed82612579565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c1f57612c1e612bb6565b5b600182019050919050565b5f60208284031215612c3f57612c3e61230a565b5b5f612c4c84828501612493565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f67ffffffffffffffff82169050919050565b612c9e81612c82565b82525050565b5f602082019050612cb75f830184612c95565b92915050565b5f604082019050612cd05f830185612816565b612cdd6020830184612adc565b9392505050565b5f60ff82169050919050565b5f819050919050565b5f612d13612d0e612d0984612ce4565b612cf0565b612579565b9050919050565b612d2381612cf9565b82525050565b5f604082019050612d3c5f830185612d1a565b612d496020830184612b59565b9392505050565b5f612d5e6020840184612493565b905092915050565b60408201612d765f830183612d50565b612d825f850182612867565b50612d906020830183612d50565b612d9d6020850182612867565b50505050565b5f819050919050565b5f602082019050919050565b5f612dc38385612848565b9350612dce82612da3565b805f5b85811015612e0657612de38284612d50565b612ded8882612876565b9750612df883612dac565b925050600181019050612dd1565b5085925050509392505050565b5f60a082019050612e265f830188612b59565b612e336020830187612d66565b8181036060830152612e46818587612db8565b9050612e556080830184612adc565b9695505050505050565b5f606082019050612e725f830186612d66565b8181036040830152612e85818486612db8565b9050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f81519050612eca81612582565b92915050565b5f60208284031215612ee557612ee461230a565b5b5f612ef284828501612ebc565b91505092915050565b5f81519050612f098161247d565b92915050565b5f60208284031215612f2457612f2361230a565b5b5f612f3184828501612efb565b91505092915050565b5f81519050612f488161231b565b92915050565b5f60208284031215612f6357612f6261230a565b5b5f612f7084828501612f3a565b91505092915050565b5f608082019050612f8c5f830187612b59565b612f996020830186612d66565b8181036060830152612fac818486612db8565b905095945050505050565b5f81519050919050565b5f81905092915050565b5f612fd582612fb7565b612fdf8185612fc1565b9350612fef8185602086016123bd565b80840191505092915050565b5f6130068284612fcb565b91508190509291505056 + ///0x60806040526004361061009b575f3560e01c806352d1902d1161006357806352d1902d1461015f57806397c49a4014610189578063ad3cb1cc146101c5578063ae953186146101ef578063c6528f691461022b578063d90724b5146102675761009b565b80630620326d1461009f5780630d8e6e2c146100db578063294a87051461010557806339f738101461012d5780634f1ef28614610143575b5f80fd5b3480156100aa575f80fd5b506100c560048036038101906100c091906119a2565b61028f565b6040516100d291906119e7565b60405180910390f35b3480156100e6575f80fd5b506100ef6102c3565b6040516100fc9190611a8a565b60405180910390f35b348015610110575f80fd5b5061012b60048036038101906101269190611b65565b61033e565b005b348015610138575f80fd5b50610141610787565b005b61015d60048036038101906101589190611cfe565b6108f7565b005b34801561016a575f80fd5b50610173610916565b6040516101809190611d67565b60405180910390f35b348015610194575f80fd5b506101af60048036038101906101aa91906119a2565b610947565b6040516101bc9190611e37565b60405180910390f35b3480156101d0575f80fd5b506101d96109f1565b6040516101e69190611a8a565b60405180910390f35b3480156101fa575f80fd5b5061021560048036038101906102109190611e57565b610a2a565b6040516102229190611e37565b60405180910390f35b348015610236575f80fd5b50610251600480360381019061024c9190611e57565b610ae3565b60405161025e91906119e7565b60405180910390f35b348015610272575f80fd5b5061028d60048036038101906102889190611e95565b610b26565b005b5f80610299610f53565b9050806003015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b60606040518060400160405280600d81526020017f4d756c7469636861696e41434c000000000000000000000000000000000000008152506103045f610f7a565b61030e6001610f7a565b6103175f610f7a565b60405160200161032a9493929190611fc0565b604051602081830303815290604052905090565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b815260040161038b919061202d565b602060405180830381865afa1580156103a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ca9190612070565b61040b57336040517f52d725f5000000000000000000000000000000000000000000000000000000008152600401610402919061202d565b60405180910390fd5b835f61041682611044565b905073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663bff3aaba826040518263ffffffff1660e01b815260040161046591906120b3565b602060405180830381865afa158015610480573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a49190612070565b6104e557806040517fb6679c3b0000000000000000000000000000000000000000000000000000000081526004016104dc91906120b3565b60405180910390fd5b5f6104ee610f53565b90505f6104fb888861105d565b90505f826005015f8381526020019081526020015f205403610531576001826005015f8381526020019081526020015f20819055505b815f015f8281526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156105d1578787336040517f6637e32d0000000000000000000000000000000000000000000000000000000081526004016105c8939291906120cc565b60405180910390fd5b816001015f8281526020019081526020015f205f8154809291906105f49061212e565b91905055506001825f015f8381526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550816002015f8281526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816003015f8281526020019081526020015f205f9054906101000a900460ff161580156107145750610713826001015f8381526020019081526020015f205461108f565b5b1561077d576001826003015f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550877f18f825f318ffa4ed5bf3f6ed24fd54d33378b0e9f16ddb37c3419691b2e1656688604051610774919061202d565b60405180910390a25b5050505050505050565b6001610791611120565b67ffffffffffffffff16146107d2576040517f6f4f731f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f6107dd611144565b9050805f0160089054906101000a900460ff168061082557508167ffffffffffffffff16815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610155b1561085c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001815f0160086101000a81548160ff0219169083151502179055505f815f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2826040516108eb9190612197565b60405180910390a15050565b6108ff61116b565b61090882611251565b6109128282611344565b5050565b5f61091f611462565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b60605f610952610f53565b9050806002015f8481526020019081526020015f208054806020026020016040519081016040528092919081815260200182805480156109e457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161099b575b5050505050915050919050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60605f610a35610f53565b90505f610a42858561105d565b9050816002015f8281526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015610ad457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610a8b575b50505050509250505092915050565b5f80610aed610f53565b90505f610afa858561105d565b9050816003015f8281526020019081526020015f205f9054906101000a900460ff169250505092915050565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16632dd3edfe336040518263ffffffff1660e01b8152600401610b73919061202d565b602060405180830381865afa158015610b8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb29190612070565b610bf357336040517f52d725f5000000000000000000000000000000000000000000000000000000008152600401610bea919061202d565b60405180910390fd5b825f610bfe82611044565b905073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff1663bff3aaba826040518263ffffffff1660e01b8152600401610c4d91906120b3565b602060405180830381865afa158015610c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c8c9190612070565b610ccd57806040517fb6679c3b000000000000000000000000000000000000000000000000000000008152600401610cc491906120b3565b60405180910390fd5b5f610cd6610f53565b90505f816005015f8881526020019081526020015f205403610d0c576001816005015f8881526020019081526020015f20819055505b805f015f8781526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610daa5785336040517fa6f04d26000000000000000000000000000000000000000000000000000000008152600401610da19291906121b0565b60405180910390fd5b806001015f8781526020019081526020015f205f815480929190610dcd9061212e565b91905055506001815f015f8881526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550806002015f8781526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806003015f8781526020019081526020015f205f9054906101000a900460ff16158015610eed5750610eec816001015f8881526020019081526020015f205461108f565b5b15610f4b576001816003015f8881526020019081526020015f205f6101000a81548160ff021916908315150217905550857f0868eca75126ba0a46bbec5eefa883e20a13e6c7d936c9bf47ed886e2eb43d3a60405160405180910390a25b505050505050565b5f7f7f733a54a70114addd729bcd827932a6c402ccf3920960665917bc2e6640f400905090565b60605f6001610f88846114e9565b0190505f8167ffffffffffffffff811115610fa657610fa5611bda565b5b6040519080825280601f01601f191660200182016040528015610fd85781602001600182028036833780820191505090505b5090505f82602001820190505b600115611039578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161102e5761102d6121d7565b5b0494505f8503610fe5575b819350505050919050565b5f67ffffffffffffffff6010835f1c901c169050919050565b5f82826040516020016110719291906121b0565b60405160208183030381529060405280519060200120905092915050565b5f8073a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16636799ef526040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611112919061222e565b905080831015915050919050565b5f611129611144565b5f015f9054906101000a900467ffffffffffffffff16905090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061121857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166111ff61163a565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561124f576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73a50f5243c70c80a8309e3d39d8c9d958cda8397973ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d2919061226d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461134157336040517f0e56cf3d000000000000000000000000000000000000000000000000000000008152600401611338919061202d565b60405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113ac57506040513d601f19601f820116820180604052508101906113a991906122ac565b60015b6113ed57816040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016113e4919061202d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461145357806040517faa1d49a400000000000000000000000000000000000000000000000000000000815260040161144a9190611d67565b60405180910390fd5b61145d838361168d565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146114e7576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611545577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161153b5761153a6121d7565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611582576d04ee2d6d415b85acef81000000008381611578576115776121d7565b5b0492506020810190505b662386f26fc1000083106115b157662386f26fc1000083816115a7576115a66121d7565b5b0492506010810190505b6305f5e10083106115da576305f5e10083816115d0576115cf6121d7565b5b0492506008810190505b61271083106115ff5761271083816115f5576115f46121d7565b5b0492506004810190505b606483106116225760648381611618576116176121d7565b5b0492506002810190505b600a8310611631576001810190505b80915050919050565b5f6116667f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6116ff565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61169682611708565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156116f2576116ec82826117d1565b506116fb565b6116fa611851565b5b5050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361176357806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161175a919061202d565b60405180910390fd5b8061178f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6116ff565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516117fa919061231b565b5f60405180830381855af49150503d805f8114611832576040519150601f19603f3d011682016040523d82523d5f602084013e611837565b606091505b509150915061184785838361188d565b9250505092915050565b5f34111561188b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6060826118a25761189d8261191a565b611912565b5f82511480156118c857505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561190a57836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401611901919061202d565b60405180910390fd5b819050611913565b5b9392505050565b5f8151111561192c5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6119818161196f565b811461198b575f80fd5b50565b5f8135905061199c81611978565b92915050565b5f602082840312156119b7576119b6611967565b5b5f6119c48482850161198e565b91505092915050565b5f8115159050919050565b6119e1816119cd565b82525050565b5f6020820190506119fa5f8301846119d8565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611a37578082015181840152602081019050611a1c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611a5c82611a00565b611a668185611a0a565b9350611a76818560208601611a1a565b611a7f81611a42565b840191505092915050565b5f6020820190508181035f830152611aa28184611a52565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611ad382611aaa565b9050919050565b611ae381611ac9565b8114611aed575f80fd5b50565b5f81359050611afe81611ada565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112611b2557611b24611b04565b5b8235905067ffffffffffffffff811115611b4257611b41611b08565b5b602083019150836001820283011115611b5e57611b5d611b0c565b5b9250929050565b5f805f8060608587031215611b7d57611b7c611967565b5b5f611b8a8782880161198e565b9450506020611b9b87828801611af0565b935050604085013567ffffffffffffffff811115611bbc57611bbb61196b565b5b611bc887828801611b10565b925092505092959194509250565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611c1082611a42565b810181811067ffffffffffffffff82111715611c2f57611c2e611bda565b5b80604052505050565b5f611c4161195e565b9050611c4d8282611c07565b919050565b5f67ffffffffffffffff821115611c6c57611c6b611bda565b5b611c7582611a42565b9050602081019050919050565b828183375f83830152505050565b5f611ca2611c9d84611c52565b611c38565b905082815260208101848484011115611cbe57611cbd611bd6565b5b611cc9848285611c82565b509392505050565b5f82601f830112611ce557611ce4611b04565b5b8135611cf5848260208601611c90565b91505092915050565b5f8060408385031215611d1457611d13611967565b5b5f611d2185828601611af0565b925050602083013567ffffffffffffffff811115611d4257611d4161196b565b5b611d4e85828601611cd1565b9150509250929050565b611d618161196f565b82525050565b5f602082019050611d7a5f830184611d58565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611db281611ac9565b82525050565b5f611dc38383611da9565b60208301905092915050565b5f602082019050919050565b5f611de582611d80565b611def8185611d8a565b9350611dfa83611d9a565b805f5b83811015611e2a578151611e118882611db8565b9750611e1c83611dcf565b925050600181019050611dfd565b5085935050505092915050565b5f6020820190508181035f830152611e4f8184611ddb565b905092915050565b5f8060408385031215611e6d57611e6c611967565b5b5f611e7a8582860161198e565b9250506020611e8b85828601611af0565b9150509250929050565b5f805f60408486031215611eac57611eab611967565b5b5f611eb98682870161198e565b935050602084013567ffffffffffffffff811115611eda57611ed961196b565b5b611ee686828701611b10565b92509250509250925092565b5f81905092915050565b5f611f0682611a00565b611f108185611ef2565b9350611f20818560208601611a1a565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f611f60600283611ef2565b9150611f6b82611f2c565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f611faa600183611ef2565b9150611fb582611f76565b600182019050919050565b5f611fcb8287611efc565b9150611fd682611f54565b9150611fe28286611efc565b9150611fed82611f9e565b9150611ff98285611efc565b915061200482611f9e565b91506120108284611efc565b915081905095945050505050565b61202781611ac9565b82525050565b5f6020820190506120405f83018461201e565b92915050565b61204f816119cd565b8114612059575f80fd5b50565b5f8151905061206a81612046565b92915050565b5f6020828403121561208557612084611967565b5b5f6120928482850161205c565b91505092915050565b5f819050919050565b6120ad8161209b565b82525050565b5f6020820190506120c65f8301846120a4565b92915050565b5f6060820190506120df5f830186611d58565b6120ec602083018561201e565b6120f9604083018461201e565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6121388261209b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361216a57612169612101565b5b600182019050919050565b5f67ffffffffffffffff82169050919050565b61219181612175565b82525050565b5f6020820190506121aa5f830184612188565b92915050565b5f6040820190506121c35f830185611d58565b6121d0602083018461201e565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b61220d8161209b565b8114612217575f80fd5b50565b5f8151905061222881612204565b92915050565b5f6020828403121561224357612242611967565b5b5f6122508482850161221a565b91505092915050565b5f8151905061226781611ada565b92915050565b5f6020828403121561228257612281611967565b5b5f61228f84828501612259565b91505092915050565b5f815190506122a681611978565b92915050565b5f602082840312156122c1576122c0611967565b5b5f6122ce84828501612298565b91505092915050565b5f81519050919050565b5f81905092915050565b5f6122f5826122d7565b6122ff81856122e1565b935061230f818560208601611a1a565b80840191505092915050565b5f61232682846122eb565b91508190509291505056 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80`@R`\x046\x10a\0\xDCW_5`\xE0\x1C\x80c\x97\xC4\x9A@\x11a\0~W\x80c\xAE\x951\x86\x11a\0XW\x80c\xAE\x951\x86\x14a\x02\xA8W\x80c\xC6R\x8Fi\x14a\x02\xE4W\x80c\xD9\x07$\xB5\x14a\x03 W\x80c\xF4\xC5\xF4\x93\x14a\x03HWa\0\xDCV[\x80c\x97\xC4\x9A@\x14a\x02\x06W\x80c\xAD<\xB1\xCC\x14a\x02BW\x80c\xAD\x8B\x0B+\x14a\x02lWa\0\xDCV[\x80c+\x13Y\x1C\x11a\0\xBAW\x80c+\x13Y\x1C\x14a\x01nW\x80c9\xF78\x10\x14a\x01\xAAW\x80cO\x1E\xF2\x86\x14a\x01\xC0W\x80cR\xD1\x90-\x14a\x01\xDCWa\0\xDCV[\x80c\x06 2m\x14a\0\xE0W\x80c\r\x8En,\x14a\x01\x1CW\x80c)J\x87\x05\x14a\x01FW[_\x80\xFD[4\x80\x15a\0\xEBW_\x80\xFD[Pa\x01\x06`\x04\x806\x03\x81\x01\x90a\x01\x01\x91\x90a#EV[a\x03pV[`@Qa\x01\x13\x91\x90a#\x8AV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01'W_\x80\xFD[Pa\x010a\x03\xA4V[`@Qa\x01=\x91\x90a$-V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01QW_\x80\xFD[Pa\x01l`\x04\x806\x03\x81\x01\x90a\x01g\x91\x90a%\x08V[a\x04\x1FV[\0[4\x80\x15a\x01yW_\x80\xFD[Pa\x01\x94`\x04\x806\x03\x81\x01\x90a\x01\x8F\x91\x90a&#V[a\t\xC5V[`@Qa\x01\xA1\x91\x90a#\x8AV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xB5W_\x80\xFD[Pa\x01\xBEa\x0B5V[\0[a\x01\xDA`\x04\x806\x03\x81\x01\x90a\x01\xD5\x91\x90a'\xBCV[a\x0C\xA5V[\0[4\x80\x15a\x01\xE7W_\x80\xFD[Pa\x01\xF0a\x0C\xC4V[`@Qa\x01\xFD\x91\x90a(%V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\x11W_\x80\xFD[Pa\x02,`\x04\x806\x03\x81\x01\x90a\x02'\x91\x90a#EV[a\x0C\xF5V[`@Qa\x029\x91\x90a(\xF5V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02MW_\x80\xFD[Pa\x02Va\r\x9EV[`@Qa\x02c\x91\x90a$-V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02wW_\x80\xFD[Pa\x02\x92`\x04\x806\x03\x81\x01\x90a\x02\x8D\x91\x90a&#V[a\r\xD7V[`@Qa\x02\x9F\x91\x90a(\xF5V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\xB3W_\x80\xFD[Pa\x02\xCE`\x04\x806\x03\x81\x01\x90a\x02\xC9\x91\x90a)\x15V[a\x0E\x94V[`@Qa\x02\xDB\x91\x90a(\xF5V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02\xEFW_\x80\xFD[Pa\x03\n`\x04\x806\x03\x81\x01\x90a\x03\x05\x91\x90a)\x15V[a\x0FzV[`@Qa\x03\x17\x91\x90a#\x8AV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x03+W_\x80\xFD[Pa\x03F`\x04\x806\x03\x81\x01\x90a\x03A\x91\x90a)SV[a\x0F\xEAV[\0[4\x80\x15a\x03SW_\x80\xFD[Pa\x03n`\x04\x806\x03\x81\x01\x90a\x03i\x91\x90a&#V[a\x13\xE4V[\0[_\x80a\x03za\x18\xF0V[\x90P\x80`\x06\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[```@Q\x80`@\x01`@R\x80`\r\x81R` \x01\x7FMultichainACL\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RPa\x03\xE5_a\x19\x17V[a\x03\xEF`\x01a\x19\x17V[a\x03\xF8_a\x19\x17V[`@Q` \x01a\x04\x0B\x94\x93\x92\x91\x90a*~V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x90V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x04l\x91\x90a*\xEBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04\x87W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xAB\x91\x90a+.V[a\x04\xECW3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x04\xE3\x91\x90a*\xEBV[`@Q\x80\x91\x03\x90\xFD[\x83_a\x04\xF7\x82a\x19\xE1V[\x90Ps\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xBF\xF3\xAA\xBA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x05F\x91\x90a+hV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x05aW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x05\x85\x91\x90a+.V[a\x05\xC6W\x80`@Q\x7F\xB6g\x9C;\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\x81R`\x04\x01a\x05\xBD\x91\x90a+hV[`@Q\x80\x91\x03\x90\xFD[_a\x05\xCFa\x18\xF0V[\x90P\x80`\x05\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x87s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x06\xADW\x86\x863`@Q\x7Ff7\xE3-\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\x81R`\x04\x01a\x06\xA4\x93\x92\x91\x90a+\x81V[`@Q\x80\x91\x03\x90\xFD[\x80`\x04\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x87s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x81T\x80\x92\x91\x90a\x07\x0B\x90a+\xE3V[\x91\x90PUP`\x01\x81`\x05\x01_\x89\x81R` \x01\x90\x81R` \x01_ _\x88s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x80`\x01\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x87s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x80`\x03\x01_\x88\x81R` \x01\x90\x81R` \x01_ _\x87s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\t\x18WPa\t\x17\x81`\x04\x01_\x89\x81R` \x01\x90\x81R` \x01_ _\x88s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ Ta\x19\xFAV[[\x15a\t\xBCW`\x01\x81`\x03\x01_\x89\x81R` \x01\x90\x81R` \x01_ _\x88s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x86\x7F\x18\xF8%\xF3\x18\xFF\xA4\xED[\xF3\xF6\xED$\xFDT\xD33x\xB0\xE9\xF1m\xDB7\xC3A\x96\x91\xB2\xE1ef\x87`@Qa\t\xB3\x91\x90a*\xEBV[`@Q\x80\x91\x03\x90\xA2[PPPPPPPV[_\x80\x83\x83\x90P\x03a\t\xD8W_\x90Pa\x0B-V[_a\t\xE1a\x18\xF0V[\x90P_[\x84\x84\x90P\x81\x10\x15a\x0B&W\x81`\x0C\x01_\x87_\x01` \x81\x01\x90a\n\x07\x91\x90a,*V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x87` \x01` \x81\x01\x90a\nT\x91\x90a,*V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x88\x81R` \x01\x90\x81R` \x01_ _\x86\x86\x84\x81\x81\x10a\n\xB0Wa\n\xAFa,UV[[\x90P` \x02\x01` \x81\x01\x90a\n\xC5\x91\x90a,*V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16a\x0B\x19W_\x92PPPa\x0B-V[\x80\x80`\x01\x01\x91PPa\t\xE5V[P`\x01\x91PP[\x94\x93PPPPV[`\x01a\x0B?a\x1A\x8BV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x0B\x80W`@Q\x7FoOs\x1F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02_a\x0B\x8Ba\x1A\xAFV[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x80a\x0B\xD3WP\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x15[\x15a\x0C\nW`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`\x01\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x82`@Qa\x0C\x99\x91\x90a,\xA4V[`@Q\x80\x91\x03\x90\xA1PPV[a\x0C\xADa\x1A\xD6V[a\x0C\xB6\x82a\x1B\xBCV[a\x0C\xC0\x82\x82a\x1C\xAFV[PPV[_a\x0C\xCDa\x1D\xCDV[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[``_a\r\0a\x18\xF0V[\x90P\x80_\x01_\x84\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\r\x91W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\rHW[PPPPP\x91PP\x91\x90PV[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[``_a\r\xE2a\x18\xF0V[\x90P_a\r\xF1\x87\x87\x87\x87a\x1ETV[\x90P\x81`\x02\x01_\x82\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x0E\x83W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x0E:W[PPPPP\x92PPP\x94\x93PPPPV[``_a\x0E\x9Fa\x18\xF0V[\x90P\x80`\x01\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x0FlW` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\x0F#W[PPPPP\x91PP\x92\x91PPV[_\x80a\x0F\x84a\x18\xF0V[\x90P\x80`\x03\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x107\x91\x90a*\xEBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x10RW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10v\x91\x90a+.V[a\x10\xB7W3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x10\xAE\x91\x90a*\xEBV[`@Q\x80\x91\x03\x90\xFD[\x82_a\x10\xC2\x82a\x19\xE1V[\x90Ps\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xBF\xF3\xAA\xBA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x11\x11\x91\x90a+hV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x11,W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11P\x91\x90a+.V[a\x11\x91W\x80`@Q\x7F\xB6g\x9C;\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\x81R`\x04\x01a\x11\x88\x91\x90a+hV[`@Q\x80\x91\x03\x90\xFD[_a\x11\x9Aa\x18\xF0V[\x90P\x80`\x08\x01_\x87\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x12;W\x853`@Q\x7F\xA6\xF0M&\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\x81R`\x04\x01a\x122\x92\x91\x90a,\xBDV[`@Q\x80\x91\x03\x90\xFD[\x80`\x07\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x81T\x80\x92\x91\x90a\x12^\x90a+\xE3V[\x91\x90PUP`\x01\x81`\x08\x01_\x88\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x80_\x01_\x87\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x80`\x06\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x13~WPa\x13}\x81`\x07\x01_\x88\x81R` \x01\x90\x81R` \x01_ Ta\x19\xFAV[[\x15a\x13\xDCW`\x01\x81`\x06\x01_\x88\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x85\x7F\x08h\xEC\xA7Q&\xBA\nF\xBB\xEC^\xEF\xA8\x83\xE2\n\x13\xE6\xC7\xD96\xC9\xBFG\xED\x88n.\xB4=:`@Q`@Q\x80\x91\x03\x90\xA2[PPPPPPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x141\x91\x90a*\xEBV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x14LW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x14p\x91\x90a+.V[a\x14\xB1W3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x14\xA8\x91\x90a*\xEBV[`@Q\x80\x91\x03\x90\xFD[_\x82\x82\x90P\x03a\x14\xEDW`@Q\x7FW\xCF\xA2\x17\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\n`\xFF\x16\x82\x82\x90P\x11\x15a\x15?W`\n\x82\x82\x90P`@Q\x7F\xA7\xDB'Q\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\x81R`\x04\x01a\x156\x92\x91\x90a-)V[`@Q\x80\x91\x03\x90\xFD[_a\x15Ha\x18\xF0V[\x90P_a\x15W\x86\x86\x86\x86a\x1ETV[\x90P_\x82`\x0B\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x90P\x80_3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x16\x02W\x86\x86\x86\x863`@Q\x7F\x0C\xC6\x95\xAD\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\x81R`\x04\x01a\x15\xF9\x95\x94\x93\x92\x91\x90a.\x13V[`@Q\x80\x91\x03\x90\xFD[\x82`\n\x01_\x83\x81R` \x01\x90\x81R` \x01_ _\x81T\x80\x92\x91\x90a\x16%\x90a+\xE3V[\x91\x90PUP`\x01\x81_3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x82`\x02\x01_\x83\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x82`\t\x01_\x83\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x174WPa\x173\x83`\n\x01_\x84\x81R` \x01\x90\x81R` \x01_ Ta\x19\xFAV[[\x15a\x18\xE7W_\x83`\x0C\x01_\x88_\x01` \x81\x01\x90a\x17Q\x91\x90a,*V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x88` \x01` \x81\x01\x90a\x17\x9E\x91\x90a,*V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x89\x81R` \x01\x90\x81R` \x01_ \x90P_[\x86\x86\x90P\x81\x10\x15a\x18}W`\x01\x82_\x89\x89\x85\x81\x81\x10a\x18\x0CWa\x18\x0Ba,UV[[\x90P` \x02\x01` \x81\x01\x90a\x18!\x91\x90a,*V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x80\x80`\x01\x01\x91PPa\x17\xEAV[P`\x01\x84`\t\x01_\x85\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x87\x7F\x06\xC11U\xCF\xA9\x03C\xCBO\xBA\x18\x0C\xE8\xD3\x83\xB4\xF5j[\xC7\xAA\xC0\xE5\xD8\xF1\x94\xB6Fr\xA5\x1E\x88\x88\x88`@Qa\x18\xDD\x93\x92\x91\x90a._V[`@Q\x80\x91\x03\x90\xA2P[PPPPPPPV[_\x7F\x7Fs:T\xA7\x01\x14\xAD\xDDr\x9B\xCD\x82y2\xA6\xC4\x02\xCC\xF3\x92\t`fY\x17\xBC.f@\xF4\0\x90P\x90V[``_`\x01a\x19%\x84a\x1E\x8CV[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x19CWa\x19Ba&\x98V[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x19uW\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a\x19\xD6W\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a\x19\xCBWa\x19\xCAa.\x8FV[[\x04\x94P_\x85\x03a\x19\x82W[\x81\x93PPPP\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x10\x83_\x1C\x90\x1C\x16\x90P\x91\x90PV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cg\x99\xEFR`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1AYW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1A}\x91\x90a.\xD0V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[_a\x1A\x94a\x1A\xAFV[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a\x1B\x83WP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x1Bja\x1F\xDDV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x1B\xBAW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x1C\x19W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1C=\x91\x90a/\x0FV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x1C\xACW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\x1C\xA3\x91\x90a*\xEBV[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a\x1D\x17WP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x1D\x14\x91\x90a/NV[`\x01[a\x1DXW\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x1DO\x91\x90a*\xEBV[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a\x1D\xBEW\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a\x1D\xB5\x91\x90a(%V[`@Q\x80\x91\x03\x90\xFD[a\x1D\xC8\x83\x83a 0V[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x1ERW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x84\x84\x84\x84`@Q` \x01a\x1El\x94\x93\x92\x91\x90a/yV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x94\x93PPPPV[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a\x1E\xE8Wz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a\x1E\xDEWa\x1E\xDDa.\x8FV[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x1F%Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a\x1F\x1BWa\x1F\x1Aa.\x8FV[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a\x1FTWf#\x86\xF2o\xC1\0\0\x83\x81a\x1FJWa\x1FIa.\x8FV[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a\x1F}Wc\x05\xF5\xE1\0\x83\x81a\x1FsWa\x1Fra.\x8FV[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a\x1F\xA2Wa'\x10\x83\x81a\x1F\x98Wa\x1F\x97a.\x8FV[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a\x1F\xC5W`d\x83\x81a\x1F\xBBWa\x1F\xBAa.\x8FV[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a\x1F\xD4W`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[_a \t\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba \xA2V[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a 9\x82a \xABV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a \x95Wa \x8F\x82\x82a!tV[Pa \x9EV[a \x9Da!\xF4V[[PPV[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a!\x06W\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a \xFD\x91\x90a*\xEBV[`@Q\x80\x91\x03\x90\xFD[\x80a!2\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba \xA2V[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa!\x9D\x91\x90a/\xFBV[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a!\xD5W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a!\xDAV[``\x91P[P\x91P\x91Pa!\xEA\x85\x83\x83a\"0V[\x92PPP\x92\x91PPV[_4\x11\x15a\".W`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[``\x82a\"EWa\"@\x82a\"\xBDV[a\"\xB5V[_\x82Q\x14\x80\x15a\"kWP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a\"\xADW\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a\"\xA4\x91\x90a*\xEBV[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa\"\xB6V[[\x93\x92PPPV[_\x81Q\x11\x15a\"\xCFW\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[a#$\x81a#\x12V[\x81\x14a#.W_\x80\xFD[PV[_\x815\x90Pa#?\x81a#\x1BV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a#ZWa#Ya#\nV[[_a#g\x84\x82\x85\x01a#1V[\x91PP\x92\x91PPV[_\x81\x15\x15\x90P\x91\x90PV[a#\x84\x81a#pV[\x82RPPV[_` \x82\x01\x90Pa#\x9D_\x83\x01\x84a#{V[\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15a#\xDAW\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa#\xBFV[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a#\xFF\x82a#\xA3V[a$\t\x81\x85a#\xADV[\x93Pa$\x19\x81\x85` \x86\x01a#\xBDV[a$\"\x81a#\xE5V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra$E\x81\x84a#\xF5V[\x90P\x92\x91PPV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a$v\x82a$MV[\x90P\x91\x90PV[a$\x86\x81a$lV[\x81\x14a$\x90W_\x80\xFD[PV[_\x815\x90Pa$\xA1\x81a$}V[\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12a$\xC8Wa$\xC7a$\xA7V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a$\xE5Wa$\xE4a$\xABV[[` \x83\x01\x91P\x83`\x01\x82\x02\x83\x01\x11\x15a%\x01Wa%\0a$\xAFV[[\x92P\x92\x90PV[_\x80_\x80``\x85\x87\x03\x12\x15a% Wa%\x1Fa#\nV[[_a%-\x87\x82\x88\x01a#1V[\x94PP` a%>\x87\x82\x88\x01a$\x93V[\x93PP`@\x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a%_Wa%^a#\x0EV[[a%k\x87\x82\x88\x01a$\xB3V[\x92P\x92PP\x92\x95\x91\x94P\x92PV[_\x81\x90P\x91\x90PV[a%\x8B\x81a%yV[\x81\x14a%\x95W_\x80\xFD[PV[_\x815\x90Pa%\xA6\x81a%\x82V[\x92\x91PPV[_\x80\xFD[_`@\x82\x84\x03\x12\x15a%\xC5Wa%\xC4a%\xACV[[\x81\x90P\x92\x91PPV[_\x80\x83`\x1F\x84\x01\x12a%\xE3Wa%\xE2a$\xA7V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a&\0Wa%\xFFa$\xABV[[` \x83\x01\x91P\x83` \x82\x02\x83\x01\x11\x15a&\x1CWa&\x1Ba$\xAFV[[\x92P\x92\x90PV[_\x80_\x80`\x80\x85\x87\x03\x12\x15a&;Wa&:a#\nV[[_a&H\x87\x82\x88\x01a%\x98V[\x94PP` a&Y\x87\x82\x88\x01a%\xB0V[\x93PP``\x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a&zWa&ya#\x0EV[[a&\x86\x87\x82\x88\x01a%\xCEV[\x92P\x92PP\x92\x95\x91\x94P\x92PV[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[a&\xCE\x82a#\xE5V[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a&\xEDWa&\xECa&\x98V[[\x80`@RPPPV[_a&\xFFa#\x01V[\x90Pa'\x0B\x82\x82a&\xC5V[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a'*Wa')a&\x98V[[a'3\x82a#\xE5V[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_a'`a'[\x84a'\x10V[a&\xF6V[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15a'|Wa'{a&\x94V[[a'\x87\x84\x82\x85a'@V[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12a'\xA3Wa'\xA2a$\xA7V[[\x815a'\xB3\x84\x82` \x86\x01a'NV[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a'\xD2Wa'\xD1a#\nV[[_a'\xDF\x85\x82\x86\x01a$\x93V[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a(\0Wa'\xFFa#\x0EV[[a(\x0C\x85\x82\x86\x01a'\x8FV[\x91PP\x92P\x92\x90PV[a(\x1F\x81a#\x12V[\x82RPPV[_` \x82\x01\x90Pa(8_\x83\x01\x84a(\x16V[\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a(p\x81a$lV[\x82RPPV[_a(\x81\x83\x83a(gV[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a(\xA3\x82a(>V[a(\xAD\x81\x85a(HV[\x93Pa(\xB8\x83a(XV[\x80_[\x83\x81\x10\x15a(\xE8W\x81Qa(\xCF\x88\x82a(vV[\x97Pa(\xDA\x83a(\x8DV[\x92PP`\x01\x81\x01\x90Pa(\xBBV[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra)\r\x81\x84a(\x99V[\x90P\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a)+Wa)*a#\nV[[_a)8\x85\x82\x86\x01a#1V[\x92PP` a)I\x85\x82\x86\x01a$\x93V[\x91PP\x92P\x92\x90PV[_\x80_`@\x84\x86\x03\x12\x15a)jWa)ia#\nV[[_a)w\x86\x82\x87\x01a#1V[\x93PP` \x84\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a)\x98Wa)\x97a#\x0EV[[a)\xA4\x86\x82\x87\x01a$\xB3V[\x92P\x92PP\x92P\x92P\x92V[_\x81\x90P\x92\x91PPV[_a)\xC4\x82a#\xA3V[a)\xCE\x81\x85a)\xB0V[\x93Pa)\xDE\x81\x85` \x86\x01a#\xBDV[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_a*\x1E`\x02\x83a)\xB0V[\x91Pa*)\x82a)\xEAV[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_a*h`\x01\x83a)\xB0V[\x91Pa*s\x82a*4V[`\x01\x82\x01\x90P\x91\x90PV[_a*\x89\x82\x87a)\xBAV[\x91Pa*\x94\x82a*\x12V[\x91Pa*\xA0\x82\x86a)\xBAV[\x91Pa*\xAB\x82a*\\V[\x91Pa*\xB7\x82\x85a)\xBAV[\x91Pa*\xC2\x82a*\\V[\x91Pa*\xCE\x82\x84a)\xBAV[\x91P\x81\x90P\x95\x94PPPPPV[a*\xE5\x81a$lV[\x82RPPV[_` \x82\x01\x90Pa*\xFE_\x83\x01\x84a*\xDCV[\x92\x91PPV[a+\r\x81a#pV[\x81\x14a+\x17W_\x80\xFD[PV[_\x81Q\x90Pa+(\x81a+\x04V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a+CWa+Ba#\nV[[_a+P\x84\x82\x85\x01a+\x1AV[\x91PP\x92\x91PPV[a+b\x81a%yV[\x82RPPV[_` \x82\x01\x90Pa+{_\x83\x01\x84a+YV[\x92\x91PPV[_``\x82\x01\x90Pa+\x94_\x83\x01\x86a(\x16V[a+\xA1` \x83\x01\x85a*\xDCV[a+\xAE`@\x83\x01\x84a*\xDCV[\x94\x93PPPPV[\x7FNH{q\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_R`\x11`\x04R`$_\xFD[_a+\xED\x82a%yV[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03a,\x1FWa,\x1Ea+\xB6V[[`\x01\x82\x01\x90P\x91\x90PV[_` \x82\x84\x03\x12\x15a,?Wa,>a#\nV[[_a,L\x84\x82\x85\x01a$\x93V[\x91PP\x92\x91PPV[\x7FNH{q\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_R`2`\x04R`$_\xFD[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[a,\x9E\x81a,\x82V[\x82RPPV[_` \x82\x01\x90Pa,\xB7_\x83\x01\x84a,\x95V[\x92\x91PPV[_`@\x82\x01\x90Pa,\xD0_\x83\x01\x85a(\x16V[a,\xDD` \x83\x01\x84a*\xDCV[\x93\x92PPPV[_`\xFF\x82\x16\x90P\x91\x90PV[_\x81\x90P\x91\x90PV[_a-\x13a-\x0Ea-\t\x84a,\xE4V[a,\xF0V[a%yV[\x90P\x91\x90PV[a-#\x81a,\xF9V[\x82RPPV[_`@\x82\x01\x90Pa-<_\x83\x01\x85a-\x1AV[a-I` \x83\x01\x84a+YV[\x93\x92PPPV[_a-^` \x84\x01\x84a$\x93V[\x90P\x92\x91PPV[`@\x82\x01a-v_\x83\x01\x83a-PV[a-\x82_\x85\x01\x82a(gV[Pa-\x90` \x83\x01\x83a-PV[a-\x9D` \x85\x01\x82a(gV[PPPPV[_\x81\x90P\x91\x90PV[_` \x82\x01\x90P\x91\x90PV[_a-\xC3\x83\x85a(HV[\x93Pa-\xCE\x82a-\xA3V[\x80_[\x85\x81\x10\x15a.\x06Wa-\xE3\x82\x84a-PV[a-\xED\x88\x82a(vV[\x97Pa-\xF8\x83a-\xACV[\x92PP`\x01\x81\x01\x90Pa-\xD1V[P\x85\x92PPP\x93\x92PPPV[_`\xA0\x82\x01\x90Pa.&_\x83\x01\x88a+YV[a.3` \x83\x01\x87a-fV[\x81\x81\x03``\x83\x01Ra.F\x81\x85\x87a-\xB8V[\x90Pa.U`\x80\x83\x01\x84a*\xDCV[\x96\x95PPPPPPV[_``\x82\x01\x90Pa.r_\x83\x01\x86a-fV[\x81\x81\x03`@\x83\x01Ra.\x85\x81\x84\x86a-\xB8V[\x90P\x94\x93PPPPV[\x7FNH{q\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_R`\x12`\x04R`$_\xFD[_\x81Q\x90Pa.\xCA\x81a%\x82V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a.\xE5Wa.\xE4a#\nV[[_a.\xF2\x84\x82\x85\x01a.\xBCV[\x91PP\x92\x91PPV[_\x81Q\x90Pa/\t\x81a$}V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a/$Wa/#a#\nV[[_a/1\x84\x82\x85\x01a.\xFBV[\x91PP\x92\x91PPV[_\x81Q\x90Pa/H\x81a#\x1BV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a/cWa/ba#\nV[[_a/p\x84\x82\x85\x01a/:V[\x91PP\x92\x91PPV[_`\x80\x82\x01\x90Pa/\x8C_\x83\x01\x87a+YV[a/\x99` \x83\x01\x86a-fV[\x81\x81\x03``\x83\x01Ra/\xAC\x81\x84\x86a-\xB8V[\x90P\x95\x94PPPPPV[_\x81Q\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[_a/\xD5\x82a/\xB7V[a/\xDF\x81\x85a/\xC1V[\x93Pa/\xEF\x81\x85` \x86\x01a#\xBDV[\x80\x84\x01\x91PP\x92\x91PPV[_a0\x06\x82\x84a/\xCBV[\x91P\x81\x90P\x92\x91PPV", + b"`\x80`@R`\x046\x10a\0\x9BW_5`\xE0\x1C\x80cR\xD1\x90-\x11a\0cW\x80cR\xD1\x90-\x14a\x01_W\x80c\x97\xC4\x9A@\x14a\x01\x89W\x80c\xAD<\xB1\xCC\x14a\x01\xC5W\x80c\xAE\x951\x86\x14a\x01\xEFW\x80c\xC6R\x8Fi\x14a\x02+W\x80c\xD9\x07$\xB5\x14a\x02gWa\0\x9BV[\x80c\x06 2m\x14a\0\x9FW\x80c\r\x8En,\x14a\0\xDBW\x80c)J\x87\x05\x14a\x01\x05W\x80c9\xF78\x10\x14a\x01-W\x80cO\x1E\xF2\x86\x14a\x01CW[_\x80\xFD[4\x80\x15a\0\xAAW_\x80\xFD[Pa\0\xC5`\x04\x806\x03\x81\x01\x90a\0\xC0\x91\x90a\x19\xA2V[a\x02\x8FV[`@Qa\0\xD2\x91\x90a\x19\xE7V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\0\xE6W_\x80\xFD[Pa\0\xEFa\x02\xC3V[`@Qa\0\xFC\x91\x90a\x1A\x8AV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x10W_\x80\xFD[Pa\x01+`\x04\x806\x03\x81\x01\x90a\x01&\x91\x90a\x1BeV[a\x03>V[\0[4\x80\x15a\x018W_\x80\xFD[Pa\x01Aa\x07\x87V[\0[a\x01]`\x04\x806\x03\x81\x01\x90a\x01X\x91\x90a\x1C\xFEV[a\x08\xF7V[\0[4\x80\x15a\x01jW_\x80\xFD[Pa\x01sa\t\x16V[`@Qa\x01\x80\x91\x90a\x1DgV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\x94W_\x80\xFD[Pa\x01\xAF`\x04\x806\x03\x81\x01\x90a\x01\xAA\x91\x90a\x19\xA2V[a\tGV[`@Qa\x01\xBC\x91\x90a\x1E7V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xD0W_\x80\xFD[Pa\x01\xD9a\t\xF1V[`@Qa\x01\xE6\x91\x90a\x1A\x8AV[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x01\xFAW_\x80\xFD[Pa\x02\x15`\x04\x806\x03\x81\x01\x90a\x02\x10\x91\x90a\x1EWV[a\n*V[`@Qa\x02\"\x91\x90a\x1E7V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x026W_\x80\xFD[Pa\x02Q`\x04\x806\x03\x81\x01\x90a\x02L\x91\x90a\x1EWV[a\n\xE3V[`@Qa\x02^\x91\x90a\x19\xE7V[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\x02rW_\x80\xFD[Pa\x02\x8D`\x04\x806\x03\x81\x01\x90a\x02\x88\x91\x90a\x1E\x95V[a\x0B&V[\0[_\x80a\x02\x99a\x0FSV[\x90P\x80`\x03\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x91PP\x91\x90PV[```@Q\x80`@\x01`@R\x80`\r\x81R` \x01\x7FMultichainACL\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81RPa\x03\x04_a\x0FzV[a\x03\x0E`\x01a\x0FzV[a\x03\x17_a\x0FzV[`@Q` \x01a\x03*\x94\x93\x92\x91\x90a\x1F\xC0V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x90V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x03\x8B\x91\x90a -V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x03\xA6W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\xCA\x91\x90a pV[a\x04\x0BW3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x04\x02\x91\x90a -V[`@Q\x80\x91\x03\x90\xFD[\x83_a\x04\x16\x82a\x10DV[\x90Ps\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xBF\xF3\xAA\xBA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x04e\x91\x90a \xB3V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x04\x80W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x04\xA4\x91\x90a pV[a\x04\xE5W\x80`@Q\x7F\xB6g\x9C;\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\x81R`\x04\x01a\x04\xDC\x91\x90a \xB3V[`@Q\x80\x91\x03\x90\xFD[_a\x04\xEEa\x0FSV[\x90P_a\x04\xFB\x88\x88a\x10]V[\x90P_\x82`\x05\x01_\x83\x81R` \x01\x90\x81R` \x01_ T\x03a\x051W`\x01\x82`\x05\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP[\x81_\x01_\x82\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\x05\xD1W\x87\x873`@Q\x7Ff7\xE3-\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\x81R`\x04\x01a\x05\xC8\x93\x92\x91\x90a \xCCV[`@Q\x80\x91\x03\x90\xFD[\x81`\x01\x01_\x82\x81R` \x01\x90\x81R` \x01_ _\x81T\x80\x92\x91\x90a\x05\xF4\x90a!.V[\x91\x90PUP`\x01\x82_\x01_\x83\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x81`\x02\x01_\x82\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x81`\x03\x01_\x82\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x07\x14WPa\x07\x13\x82`\x01\x01_\x83\x81R` \x01\x90\x81R` \x01_ Ta\x10\x8FV[[\x15a\x07}W`\x01\x82`\x03\x01_\x83\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x87\x7F\x18\xF8%\xF3\x18\xFF\xA4\xED[\xF3\xF6\xED$\xFDT\xD33x\xB0\xE9\xF1m\xDB7\xC3A\x96\x91\xB2\xE1ef\x88`@Qa\x07t\x91\x90a -V[`@Q\x80\x91\x03\x90\xA2[PPPPPPPPV[`\x01a\x07\x91a\x11 V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x07\xD2W`@Q\x7FoOs\x1F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02_a\x07\xDDa\x11DV[\x90P\x80_\x01`\x08\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x80a\x08%WP\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x15[\x15a\x08\\W`@Q\x7F\xF9.\xE8\xA9\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x81\x81_\x01_a\x01\0\n\x81T\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP`\x01\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP_\x81_\x01`\x08a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x82`@Qa\x08\xEB\x91\x90a!\x97V[`@Q\x80\x91\x03\x90\xA1PPV[a\x08\xFFa\x11kV[a\t\x08\x82a\x12QV[a\t\x12\x82\x82a\x13DV[PPV[_a\t\x1Fa\x14bV[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x90P\x90V[``_a\tRa\x0FSV[\x90P\x80`\x02\x01_\x84\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\t\xE4W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\t\x9BW[PPPPP\x91PP\x91\x90PV[`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01\x7F5.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\x81RP\x81V[``_a\n5a\x0FSV[\x90P_a\nB\x85\x85a\x10]V[\x90P\x81`\x02\x01_\x82\x81R` \x01\x90\x81R` \x01_ \x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\n\xD4W` \x02\x82\x01\x91\x90_R` _ \x90[\x81_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90`\x01\x01\x90\x80\x83\x11a\n\x8BW[PPPPP\x92PPP\x92\x91PPV[_\x80a\n\xEDa\x0FSV[\x90P_a\n\xFA\x85\x85a\x10]V[\x90P\x81`\x03\x01_\x82\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x92PPP\x92\x91PPV[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c-\xD3\xED\xFE3`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0Bs\x91\x90a -V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0B\x8EW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0B\xB2\x91\x90a pV[a\x0B\xF3W3`@Q\x7FR\xD7%\xF5\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\x81R`\x04\x01a\x0B\xEA\x91\x90a -V[`@Q\x80\x91\x03\x90\xFD[\x82_a\x0B\xFE\x82a\x10DV[\x90Ps\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\xBF\xF3\xAA\xBA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0CM\x91\x90a \xB3V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0ChW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0C\x8C\x91\x90a pV[a\x0C\xCDW\x80`@Q\x7F\xB6g\x9C;\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\x81R`\x04\x01a\x0C\xC4\x91\x90a \xB3V[`@Q\x80\x91\x03\x90\xFD[_a\x0C\xD6a\x0FSV[\x90P_\x81`\x05\x01_\x88\x81R` \x01\x90\x81R` \x01_ T\x03a\r\x0CW`\x01\x81`\x05\x01_\x88\x81R` \x01\x90\x81R` \x01_ \x81\x90UP[\x80_\x01_\x87\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15a\r\xAAW\x853`@Q\x7F\xA6\xF0M&\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\x81R`\x04\x01a\r\xA1\x92\x91\x90a!\xB0V[`@Q\x80\x91\x03\x90\xFD[\x80`\x01\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x81T\x80\x92\x91\x90a\r\xCD\x90a!.V[\x91\x90PUP`\x01\x81_\x01_\x88\x81R` \x01\x90\x81R` \x01_ _3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x80`\x02\x01_\x87\x81R` \x01\x90\x81R` \x01_ 3\x90\x80`\x01\x81T\x01\x80\x82U\x80\x91PP`\x01\x90\x03\x90_R` _ \x01_\x90\x91\x90\x91\x90\x91a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UP\x80`\x03\x01_\x87\x81R` \x01\x90\x81R` \x01_ _\x90T\x90a\x01\0\n\x90\x04`\xFF\x16\x15\x80\x15a\x0E\xEDWPa\x0E\xEC\x81`\x01\x01_\x88\x81R` \x01\x90\x81R` \x01_ Ta\x10\x8FV[[\x15a\x0FKW`\x01\x81`\x03\x01_\x88\x81R` \x01\x90\x81R` \x01_ _a\x01\0\n\x81T\x81`\xFF\x02\x19\x16\x90\x83\x15\x15\x02\x17\x90UP\x85\x7F\x08h\xEC\xA7Q&\xBA\nF\xBB\xEC^\xEF\xA8\x83\xE2\n\x13\xE6\xC7\xD96\xC9\xBFG\xED\x88n.\xB4=:`@Q`@Q\x80\x91\x03\x90\xA2[PPPPPPV[_\x7F\x7Fs:T\xA7\x01\x14\xAD\xDDr\x9B\xCD\x82y2\xA6\xC4\x02\xCC\xF3\x92\t`fY\x17\xBC.f@\xF4\0\x90P\x90V[``_`\x01a\x0F\x88\x84a\x14\xE9V[\x01\x90P_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x0F\xA6Wa\x0F\xA5a\x1B\xDAV[[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x0F\xD8W\x81` \x01`\x01\x82\x02\x806\x837\x80\x82\x01\x91PP\x90P[P\x90P_\x82` \x01\x82\x01\x90P[`\x01\x15a\x109W\x80\x80`\x01\x90\x03\x91PP\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\n\x86\x06\x1A\x81S`\n\x85\x81a\x10.Wa\x10-a!\xD7V[[\x04\x94P_\x85\x03a\x0F\xE5W[\x81\x93PPPP\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x10\x83_\x1C\x90\x1C\x16\x90P\x91\x90PV[_\x82\x82`@Q` \x01a\x10q\x92\x91\x90a!\xB0V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x92\x91PPV[_\x80s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cg\x99\xEFR`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x10\xEEW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x11\x12\x91\x90a\".V[\x90P\x80\x83\x10\x15\x91PP\x91\x90PV[_a\x11)a\x11DV[_\x01_\x90T\x90a\x01\0\n\x90\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[_\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0\x90P\x90V[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x80a\x12\x18WP\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x11\xFFa\x16:V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14\x15[\x15a\x12OW`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[s\xA5\x0FRC\xC7\x0C\x80\xA80\x9E=9\xD8\xC9\xD9X\xCD\xA89ys\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16c\x8D\xA5\xCB[`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x12\xAEW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x12\xD2\x91\x90a\"mV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x13AW3`@Q\x7F\x0EV\xCF=\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\x81R`\x04\x01a\x138\x91\x90a -V[`@Q\x80\x91\x03\x90\xFD[PV[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16cR\xD1\x90-`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x92PPP\x80\x15a\x13\xACWP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13\xA9\x91\x90a\"\xACV[`\x01[a\x13\xEDW\x81`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x13\xE4\x91\x90a -V[`@Q\x80\x91\x03\x90\xFD[\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1B\x81\x14a\x14SW\x80`@Q\x7F\xAA\x1DI\xA4\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\x81R`\x04\x01a\x14J\x91\x90a\x1DgV[`@Q\x80\x91\x03\x90\xFD[a\x14]\x83\x83a\x16\x8DV[PPPV[\x7F\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\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x160s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x14\xE7W`@Q\x7F\xE0|\x8D\xBA\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[_\x80_\x90Pz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x10a\x15EWz\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x83\x81a\x15;Wa\x15:a!\xD7V[[\x04\x92P`@\x81\x01\x90P[m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x10a\x15\x82Wm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x83\x81a\x15xWa\x15wa!\xD7V[[\x04\x92P` \x81\x01\x90P[f#\x86\xF2o\xC1\0\0\x83\x10a\x15\xB1Wf#\x86\xF2o\xC1\0\0\x83\x81a\x15\xA7Wa\x15\xA6a!\xD7V[[\x04\x92P`\x10\x81\x01\x90P[c\x05\xF5\xE1\0\x83\x10a\x15\xDAWc\x05\xF5\xE1\0\x83\x81a\x15\xD0Wa\x15\xCFa!\xD7V[[\x04\x92P`\x08\x81\x01\x90P[a'\x10\x83\x10a\x15\xFFWa'\x10\x83\x81a\x15\xF5Wa\x15\xF4a!\xD7V[[\x04\x92P`\x04\x81\x01\x90P[`d\x83\x10a\x16\"W`d\x83\x81a\x16\x18Wa\x16\x17a!\xD7V[[\x04\x92P`\x02\x81\x01\x90P[`\n\x83\x10a\x161W`\x01\x81\x01\x90P[\x80\x91PP\x91\x90PV[_a\x16f\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba\x16\xFFV[_\x01_\x90T\x90a\x01\0\n\x90\x04s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90P\x90V[a\x16\x96\x82a\x17\x08V[\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;`@Q`@Q\x80\x91\x03\x90\xA2_\x81Q\x11\x15a\x16\xF2Wa\x16\xEC\x82\x82a\x17\xD1V[Pa\x16\xFBV[a\x16\xFAa\x18QV[[PPV[_\x81\x90P\x91\x90PV[_\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x03a\x17cW\x80`@Q\x7FL\x9C\x8C\xE3\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\x81R`\x04\x01a\x17Z\x91\x90a -V[`@Q\x80\x91\x03\x90\xFD[\x80a\x17\x8F\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC_\x1Ba\x16\xFFV[_\x01_a\x01\0\n\x81T\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x02\x19\x16\x90\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x02\x17\x90UPPV[``_\x80\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x84`@Qa\x17\xFA\x91\x90a#\x1BV[_`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80_\x81\x14a\x182W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a\x187V[``\x91P[P\x91P\x91Pa\x18G\x85\x83\x83a\x18\x8DV[\x92PPP\x92\x91PPV[_4\x11\x15a\x18\x8BW`@Q\x7F\xB3\x98\x97\x9F\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[V[``\x82a\x18\xA2Wa\x18\x9D\x82a\x19\x1AV[a\x19\x12V[_\x82Q\x14\x80\x15a\x18\xC8WP_\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16;\x14[\x15a\x19\nW\x83`@Q\x7F\x99\x96\xB3\x15\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\x81R`\x04\x01a\x19\x01\x91\x90a -V[`@Q\x80\x91\x03\x90\xFD[\x81\x90Pa\x19\x13V[[\x93\x92PPPV[_\x81Q\x11\x15a\x19,W\x80Q\x80\x82` \x01\xFD[`@Q\x7F\xD6\xBD\xA2u\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\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_`@Q\x90P\x90V[_\x80\xFD[_\x80\xFD[_\x81\x90P\x91\x90PV[a\x19\x81\x81a\x19oV[\x81\x14a\x19\x8BW_\x80\xFD[PV[_\x815\x90Pa\x19\x9C\x81a\x19xV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x19\xB7Wa\x19\xB6a\x19gV[[_a\x19\xC4\x84\x82\x85\x01a\x19\x8EV[\x91PP\x92\x91PPV[_\x81\x15\x15\x90P\x91\x90PV[a\x19\xE1\x81a\x19\xCDV[\x82RPPV[_` \x82\x01\x90Pa\x19\xFA_\x83\x01\x84a\x19\xD8V[\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_[\x83\x81\x10\x15a\x1A7W\x80\x82\x01Q\x81\x84\x01R` \x81\x01\x90Pa\x1A\x1CV[_\x84\x84\x01RPPPPV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a\x1A\\\x82a\x1A\0V[a\x1Af\x81\x85a\x1A\nV[\x93Pa\x1Av\x81\x85` \x86\x01a\x1A\x1AV[a\x1A\x7F\x81a\x1ABV[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x1A\xA2\x81\x84a\x1ARV[\x90P\x92\x91PPV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a\x1A\xD3\x82a\x1A\xAAV[\x90P\x91\x90PV[a\x1A\xE3\x81a\x1A\xC9V[\x81\x14a\x1A\xEDW_\x80\xFD[PV[_\x815\x90Pa\x1A\xFE\x81a\x1A\xDAV[\x92\x91PPV[_\x80\xFD[_\x80\xFD[_\x80\xFD[_\x80\x83`\x1F\x84\x01\x12a\x1B%Wa\x1B$a\x1B\x04V[[\x825\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1BBWa\x1BAa\x1B\x08V[[` \x83\x01\x91P\x83`\x01\x82\x02\x83\x01\x11\x15a\x1B^Wa\x1B]a\x1B\x0CV[[\x92P\x92\x90PV[_\x80_\x80``\x85\x87\x03\x12\x15a\x1B}Wa\x1B|a\x19gV[[_a\x1B\x8A\x87\x82\x88\x01a\x19\x8EV[\x94PP` a\x1B\x9B\x87\x82\x88\x01a\x1A\xF0V[\x93PP`@\x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1B\xBCWa\x1B\xBBa\x19kV[[a\x1B\xC8\x87\x82\x88\x01a\x1B\x10V[\x92P\x92PP\x92\x95\x91\x94P\x92PV[_\x80\xFD[\x7FNH{q\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_R`A`\x04R`$_\xFD[a\x1C\x10\x82a\x1ABV[\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1C/Wa\x1C.a\x1B\xDAV[[\x80`@RPPPV[_a\x1CAa\x19^V[\x90Pa\x1CM\x82\x82a\x1C\x07V[\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a\x1ClWa\x1Cka\x1B\xDAV[[a\x1Cu\x82a\x1ABV[\x90P` \x81\x01\x90P\x91\x90PV[\x82\x81\x837_\x83\x83\x01RPPPV[_a\x1C\xA2a\x1C\x9D\x84a\x1CRV[a\x1C8V[\x90P\x82\x81R` \x81\x01\x84\x84\x84\x01\x11\x15a\x1C\xBEWa\x1C\xBDa\x1B\xD6V[[a\x1C\xC9\x84\x82\x85a\x1C\x82V[P\x93\x92PPPV[_\x82`\x1F\x83\x01\x12a\x1C\xE5Wa\x1C\xE4a\x1B\x04V[[\x815a\x1C\xF5\x84\x82` \x86\x01a\x1C\x90V[\x91PP\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a\x1D\x14Wa\x1D\x13a\x19gV[[_a\x1D!\x85\x82\x86\x01a\x1A\xF0V[\x92PP` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1DBWa\x1DAa\x19kV[[a\x1DN\x85\x82\x86\x01a\x1C\xD1V[\x91PP\x92P\x92\x90PV[a\x1Da\x81a\x19oV[\x82RPPV[_` \x82\x01\x90Pa\x1Dz_\x83\x01\x84a\x1DXV[\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[_\x81\x90P` \x82\x01\x90P\x91\x90PV[a\x1D\xB2\x81a\x1A\xC9V[\x82RPPV[_a\x1D\xC3\x83\x83a\x1D\xA9V[` \x83\x01\x90P\x92\x91PPV[_` \x82\x01\x90P\x91\x90PV[_a\x1D\xE5\x82a\x1D\x80V[a\x1D\xEF\x81\x85a\x1D\x8AV[\x93Pa\x1D\xFA\x83a\x1D\x9AV[\x80_[\x83\x81\x10\x15a\x1E*W\x81Qa\x1E\x11\x88\x82a\x1D\xB8V[\x97Pa\x1E\x1C\x83a\x1D\xCFV[\x92PP`\x01\x81\x01\x90Pa\x1D\xFDV[P\x85\x93PPPP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x1EO\x81\x84a\x1D\xDBV[\x90P\x92\x91PPV[_\x80`@\x83\x85\x03\x12\x15a\x1EmWa\x1Ela\x19gV[[_a\x1Ez\x85\x82\x86\x01a\x19\x8EV[\x92PP` a\x1E\x8B\x85\x82\x86\x01a\x1A\xF0V[\x91PP\x92P\x92\x90PV[_\x80_`@\x84\x86\x03\x12\x15a\x1E\xACWa\x1E\xABa\x19gV[[_a\x1E\xB9\x86\x82\x87\x01a\x19\x8EV[\x93PP` \x84\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1E\xDAWa\x1E\xD9a\x19kV[[a\x1E\xE6\x86\x82\x87\x01a\x1B\x10V[\x92P\x92PP\x92P\x92P\x92V[_\x81\x90P\x92\x91PPV[_a\x1F\x06\x82a\x1A\0V[a\x1F\x10\x81\x85a\x1E\xF2V[\x93Pa\x1F \x81\x85` \x86\x01a\x1A\x1AV[\x80\x84\x01\x91PP\x92\x91PPV[\x7F v\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_\x82\x01RPV[_a\x1F``\x02\x83a\x1E\xF2V[\x91Pa\x1Fk\x82a\x1F,V[`\x02\x82\x01\x90P\x91\x90PV[\x7F.\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_\x82\x01RPV[_a\x1F\xAA`\x01\x83a\x1E\xF2V[\x91Pa\x1F\xB5\x82a\x1FvV[`\x01\x82\x01\x90P\x91\x90PV[_a\x1F\xCB\x82\x87a\x1E\xFCV[\x91Pa\x1F\xD6\x82a\x1FTV[\x91Pa\x1F\xE2\x82\x86a\x1E\xFCV[\x91Pa\x1F\xED\x82a\x1F\x9EV[\x91Pa\x1F\xF9\x82\x85a\x1E\xFCV[\x91Pa \x04\x82a\x1F\x9EV[\x91Pa \x10\x82\x84a\x1E\xFCV[\x91P\x81\x90P\x95\x94PPPPPV[a '\x81a\x1A\xC9V[\x82RPPV[_` \x82\x01\x90Pa @_\x83\x01\x84a \x1EV[\x92\x91PPV[a O\x81a\x19\xCDV[\x81\x14a YW_\x80\xFD[PV[_\x81Q\x90Pa j\x81a FV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a \x85Wa \x84a\x19gV[[_a \x92\x84\x82\x85\x01a \\V[\x91PP\x92\x91PPV[_\x81\x90P\x91\x90PV[a \xAD\x81a \x9BV[\x82RPPV[_` \x82\x01\x90Pa \xC6_\x83\x01\x84a \xA4V[\x92\x91PPV[_``\x82\x01\x90Pa \xDF_\x83\x01\x86a\x1DXV[a \xEC` \x83\x01\x85a \x1EV[a \xF9`@\x83\x01\x84a \x1EV[\x94\x93PPPPV[\x7FNH{q\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_R`\x11`\x04R`$_\xFD[_a!8\x82a \x9BV[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03a!jWa!ia!\x01V[[`\x01\x82\x01\x90P\x91\x90PV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[a!\x91\x81a!uV[\x82RPPV[_` \x82\x01\x90Pa!\xAA_\x83\x01\x84a!\x88V[\x92\x91PPV[_`@\x82\x01\x90Pa!\xC3_\x83\x01\x85a\x1DXV[a!\xD0` \x83\x01\x84a \x1EV[\x93\x92PPPV[\x7FNH{q\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_R`\x12`\x04R`$_\xFD[a\"\r\x81a \x9BV[\x81\x14a\"\x17W_\x80\xFD[PV[_\x81Q\x90Pa\"(\x81a\"\x04V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\"CWa\"Ba\x19gV[[_a\"P\x84\x82\x85\x01a\"\x1AV[\x91PP\x92\x91PPV[_\x81Q\x90Pa\"g\x81a\x1A\xDAV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\"\x82Wa\"\x81a\x19gV[[_a\"\x8F\x84\x82\x85\x01a\"YV[\x91PP\x92\x91PPV[_\x81Q\x90Pa\"\xA6\x81a\x19xV[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\"\xC1Wa\"\xC0a\x19gV[[_a\"\xCE\x84\x82\x85\x01a\"\x98V[\x91PP\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[_a\"\xF5\x82a\"\xD7V[a\"\xFF\x81\x85a\"\xE1V[\x93Pa#\x0F\x81\x85` \x86\x01a\x1A\x1AV[\x80\x84\x01\x91PP\x92\x91PPV[_a#&\x82\x84a\"\xEBV[\x91P\x81\x90P\x92\x91PPV", ); #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**```solidity -struct DelegationAccounts { address delegatorAddress; address delegatedAddress; } -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct DelegationAccounts { - #[allow(missing_docs)] - pub delegatorAddress: alloy::sol_types::private::Address, - #[allow(missing_docs)] - pub delegatedAddress: alloy::sol_types::private::Address, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Address, - alloy::sol_types::sol_data::Address, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Address, - alloy::sol_types::private::Address, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: DelegationAccounts) -> Self { - (value.delegatorAddress, value.delegatedAddress) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for DelegationAccounts { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - delegatorAddress: tuple.0, - delegatedAddress: tuple.1, - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolValue for DelegationAccounts { - type SolType = Self; - } - #[automatically_derived] - impl alloy_sol_types::private::SolTypeValue for DelegationAccounts { - #[inline] - fn stv_to_tokens(&self) -> ::Token<'_> { - ( - ::tokenize( - &self.delegatorAddress, - ), - ::tokenize( - &self.delegatedAddress, - ), - ) - } - #[inline] - fn stv_abi_encoded_size(&self) -> usize { - if let Some(size) = ::ENCODED_SIZE { - return size; - } - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_encoded_size(&tuple) - } - #[inline] - fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { - ::eip712_hash_struct(self) - } - #[inline] - fn stv_abi_encode_packed_to( - &self, - out: &mut alloy_sol_types::private::Vec, - ) { - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out) - } - #[inline] - fn stv_abi_packed_encoded_size(&self) -> usize { - if let Some(size) = ::PACKED_ENCODED_SIZE { - return size; - } - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple) - } - } - #[automatically_derived] - impl alloy_sol_types::SolType for DelegationAccounts { - type RustType = Self; - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SOL_NAME: &'static str = ::NAME; - const ENCODED_SIZE: Option = as alloy_sol_types::SolType>::ENCODED_SIZE; - const PACKED_ENCODED_SIZE: Option = as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; - #[inline] - fn valid_token(token: &Self::Token<'_>) -> bool { - as alloy_sol_types::SolType>::valid_token(token) - } - #[inline] - fn detokenize(token: Self::Token<'_>) -> Self::RustType { - let tuple = as alloy_sol_types::SolType>::detokenize(token); - >>::from(tuple) - } - } - #[automatically_derived] - impl alloy_sol_types::SolStruct for DelegationAccounts { - const NAME: &'static str = "DelegationAccounts"; - #[inline] - fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { - alloy_sol_types::private::Cow::Borrowed( - "DelegationAccounts(address delegatorAddress,address delegatedAddress)", - ) - } - #[inline] - fn eip712_components() -> alloy_sol_types::private::Vec< - alloy_sol_types::private::Cow<'static, str>, - > { - alloy_sol_types::private::Vec::new() - } - #[inline] - fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { - ::eip712_root_type() - } - #[inline] - fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { - [ - ::eip712_data_word( - &self.delegatorAddress, - ) - .0, - ::eip712_data_word( - &self.delegatedAddress, - ) - .0, - ] - .concat() - } - } - #[automatically_derived] - impl alloy_sol_types::EventTopic for DelegationAccounts { - #[inline] - fn topic_preimage_length(rust: &Self::RustType) -> usize { - 0usize - + ::topic_preimage_length( - &rust.delegatorAddress, - ) - + ::topic_preimage_length( - &rust.delegatedAddress, - ) - } - #[inline] - fn encode_topic_preimage( - rust: &Self::RustType, - out: &mut alloy_sol_types::private::Vec, - ) { - out.reserve( - ::topic_preimage_length(rust), - ); - ::encode_topic_preimage( - &rust.delegatorAddress, - out, - ); - ::encode_topic_preimage( - &rust.delegatedAddress, - out, - ); - } - #[inline] - fn encode_topic( - rust: &Self::RustType, - ) -> alloy_sol_types::abi::token::WordToken { - let mut out = alloy_sol_types::private::Vec::new(); - ::encode_topic_preimage( - rust, - &mut out, - ); - alloy_sol_types::abi::token::WordToken( - alloy_sol_types::private::keccak256(out), - ) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Custom error with signature `AddressEmptyCode(address)` and selector `0x9996b315`. ```solidity error AddressEmptyCode(address target); @@ -1344,23 +922,15 @@ error CoprocessorAlreadyAllowedPublicDecrypt(bytes32 ctHandle, address txSender) }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `CoprocessorAlreadyDelegated(uint256,(address,address),address[],address)` and selector `0x0cc695ad`. + /**Custom error with signature `ERC1967InvalidImplementation(address)` and selector `0x4c9c8ce3`. ```solidity -error CoprocessorAlreadyDelegated(uint256 chainId, DelegationAccounts delegationAccounts, address[] contractAddresses, address txSender); +error ERC1967InvalidImplementation(address implementation); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct CoprocessorAlreadyDelegated { - #[allow(missing_docs)] - pub chainId: alloy::sol_types::private::primitives::aliases::U256, - #[allow(missing_docs)] - pub delegationAccounts: ::RustType, - #[allow(missing_docs)] - pub contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, + pub struct ERC1967InvalidImplementation { #[allow(missing_docs)] - pub txSender: alloy::sol_types::private::Address, + pub implementation: alloy::sol_types::private::Address, } #[allow( non_camel_case_types, @@ -1371,19 +941,9 @@ error CoprocessorAlreadyDelegated(uint256 chainId, DelegationAccounts delegation const _: () = { use alloy::sol_types as alloy_sol_types; #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, - alloy::sol_types::sol_data::Address, - ); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ::RustType, - alloy::sol_types::private::Vec, - alloy::sol_types::private::Address, - ); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -1397,117 +957,16 @@ error CoprocessorAlreadyDelegated(uint256 chainId, DelegationAccounts delegation } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: CoprocessorAlreadyDelegated) -> Self { - ( - value.chainId, - value.delegationAccounts, - value.contractAddresses, - value.txSender, - ) + fn from(value: ERC1967InvalidImplementation) -> Self { + (value.implementation,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for CoprocessorAlreadyDelegated { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - chainId: tuple.0, - delegationAccounts: tuple.1, - contractAddresses: tuple.2, - txSender: tuple.3, - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolError for CoprocessorAlreadyDelegated { - type Parameters<'a> = UnderlyingSolTuple<'a>; - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "CoprocessorAlreadyDelegated(uint256,(address,address),address[],address)"; - const SELECTOR: [u8; 4] = [12u8, 198u8, 149u8, 173u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.chainId), - ::tokenize( - &self.delegationAccounts, - ), - as alloy_sol_types::SolType>::tokenize(&self.contractAddresses), - ::tokenize( - &self.txSender, - ), - ) - } - #[inline] - fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Self::new) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `ERC1967InvalidImplementation(address)` and selector `0x4c9c8ce3`. -```solidity -error ERC1967InvalidImplementation(address implementation); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct ERC1967InvalidImplementation { - #[allow(missing_docs)] - pub implementation: alloy::sol_types::private::Address, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: ERC1967InvalidImplementation) -> Self { - (value.implementation,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for ERC1967InvalidImplementation { + for ERC1967InvalidImplementation { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { implementation: tuple.0 } } @@ -3007,133 +2466,6 @@ event AllowPublicDecrypt(bytes32 indexed ctHandle); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Event with signature `DelegateAccount(uint256,(address,address),address[])` and selector `0x06c13155cfa90343cb4fba180ce8d383b4f56a5bc7aac0e5d8f194b64672a51e`. -```solidity -event DelegateAccount(uint256 indexed chainId, DelegationAccounts delegationAccounts, address[] contractAddresses); -```*/ - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - #[derive(Clone)] - pub struct DelegateAccount { - #[allow(missing_docs)] - pub chainId: alloy::sol_types::private::primitives::aliases::U256, - #[allow(missing_docs)] - pub delegationAccounts: ::RustType, - #[allow(missing_docs)] - pub contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[automatically_derived] - impl alloy_sol_types::SolEvent for DelegateAccount { - type DataTuple<'a> = ( - DelegationAccounts, - alloy::sol_types::sol_data::Array, - ); - type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - type TopicList = ( - alloy_sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Uint<256>, - ); - const SIGNATURE: &'static str = "DelegateAccount(uint256,(address,address),address[])"; - const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ - 6u8, 193u8, 49u8, 85u8, 207u8, 169u8, 3u8, 67u8, 203u8, 79u8, 186u8, - 24u8, 12u8, 232u8, 211u8, 131u8, 180u8, 245u8, 106u8, 91u8, 199u8, 170u8, - 192u8, 229u8, 216u8, 241u8, 148u8, 182u8, 70u8, 114u8, 165u8, 30u8, - ]); - const ANONYMOUS: bool = false; - #[allow(unused_variables)] - #[inline] - fn new( - topics: ::RustType, - data: as alloy_sol_types::SolType>::RustType, - ) -> Self { - Self { - chainId: topics.1, - delegationAccounts: data.0, - contractAddresses: data.1, - } - } - #[inline] - fn check_signature( - topics: &::RustType, - ) -> alloy_sol_types::Result<()> { - if topics.0 != Self::SIGNATURE_HASH { - return Err( - alloy_sol_types::Error::invalid_event_signature_hash( - Self::SIGNATURE, - topics.0, - Self::SIGNATURE_HASH, - ), - ); - } - Ok(()) - } - #[inline] - fn tokenize_body(&self) -> Self::DataToken<'_> { - ( - ::tokenize( - &self.delegationAccounts, - ), - as alloy_sol_types::SolType>::tokenize(&self.contractAddresses), - ) - } - #[inline] - fn topics(&self) -> ::RustType { - (Self::SIGNATURE_HASH.into(), self.chainId.clone()) - } - #[inline] - fn encode_topics_raw( - &self, - out: &mut [alloy_sol_types::abi::token::WordToken], - ) -> alloy_sol_types::Result<()> { - if out.len() < ::COUNT { - return Err(alloy_sol_types::Error::Overrun); - } - out[0usize] = alloy_sol_types::abi::token::WordToken( - Self::SIGNATURE_HASH, - ); - out[1usize] = as alloy_sol_types::EventTopic>::encode_topic(&self.chainId); - Ok(()) - } - } - #[automatically_derived] - impl alloy_sol_types::private::IntoLogData for DelegateAccount { - fn to_log_data(&self) -> alloy_sol_types::private::LogData { - From::from(self) - } - fn into_log_data(self) -> alloy_sol_types::private::LogData { - From::from(&self) - } - } - #[automatically_derived] - impl From<&DelegateAccount> for alloy_sol_types::private::LogData { - #[inline] - fn from(this: &DelegateAccount) -> alloy_sol_types::private::LogData { - alloy_sol_types::SolEvent::encode_log_data(this) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Event with signature `Initialized(uint64)` and selector `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2`. ```solidity event Initialized(uint64 version); @@ -3882,26 +3214,27 @@ function allowPublicDecrypt(bytes32 ctHandle, bytes memory) external; }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `delegateAccount(uint256,(address,address),address[])` and selector `0xf4c5f493`. + /**Function with signature `getAllowAccountConsensusTxSenders(bytes32,address)` and selector `0xae953186`. ```solidity -function delegateAccount(uint256 chainId, DelegationAccounts memory delegationAccounts, address[] memory contractAddresses) external; +function getAllowAccountConsensusTxSenders(bytes32 ctHandle, address accountAddress) external view returns (address[] memory); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct delegateAccountCall { - #[allow(missing_docs)] - pub chainId: alloy::sol_types::private::primitives::aliases::U256, + pub struct getAllowAccountConsensusTxSendersCall { #[allow(missing_docs)] - pub delegationAccounts: ::RustType, + pub ctHandle: alloy::sol_types::private::FixedBytes<32>, #[allow(missing_docs)] - pub contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, + pub accountAddress: alloy::sol_types::private::Address, } - ///Container type for the return parameters of the [`delegateAccount(uint256,(address,address),address[])`](delegateAccountCall) function. + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getAllowAccountConsensusTxSenders(bytes32,address)`](getAllowAccountConsensusTxSendersCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct delegateAccountReturn {} + pub struct getAllowAccountConsensusTxSendersReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Vec, + } #[allow( non_camel_case_types, non_snake_case, @@ -3913,15 +3246,13 @@ function delegateAccount(uint256 chainId, DelegationAccounts memory delegationAc { #[doc(hidden)] type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, + alloy::sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, ); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ::RustType, - alloy::sol_types::private::Vec, + alloy::sol_types::private::FixedBytes<32>, + alloy::sol_types::private::Address, ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] @@ -3936,28 +3267,33 @@ function delegateAccount(uint256 chainId, DelegationAccounts memory delegationAc } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: delegateAccountCall) -> Self { - (value.chainId, value.delegationAccounts, value.contractAddresses) + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getAllowAccountConsensusTxSendersCall) -> Self { + (value.ctHandle, value.accountAddress) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for delegateAccountCall { + impl ::core::convert::From> + for getAllowAccountConsensusTxSendersCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { - chainId: tuple.0, - delegationAccounts: tuple.1, - contractAddresses: tuple.2, + ctHandle: tuple.0, + accountAddress: tuple.1, } } } } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Array, + ); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Vec, + ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -3971,45 +3307,41 @@ function delegateAccount(uint256 chainId, DelegationAccounts memory delegationAc } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: delegateAccountReturn) -> Self { - () + fn from(value: getAllowAccountConsensusTxSendersReturn) -> Self { + (value._0,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for delegateAccountReturn { + for getAllowAccountConsensusTxSendersReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} + Self { _0: tuple.0 } } } } - impl delegateAccountReturn { - fn _tokenize( - &self, - ) -> ::ReturnToken<'_> { - () - } - } #[automatically_derived] - impl alloy_sol_types::SolCall for delegateAccountCall { + impl alloy_sol_types::SolCall for getAllowAccountConsensusTxSendersCall { type Parameters<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, + alloy::sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, ); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = delegateAccountReturn; - type ReturnTuple<'a> = (); + type Return = alloy::sol_types::private::Vec< + alloy::sol_types::private::Address, + >; + type ReturnTuple<'a> = ( + alloy::sol_types::sol_data::Array, + ); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "delegateAccount(uint256,(address,address),address[])"; - const SELECTOR: [u8; 4] = [244u8, 197u8, 244u8, 147u8]; + const SIGNATURE: &'static str = "getAllowAccountConsensusTxSenders(bytes32,address)"; + const SELECTOR: [u8; 4] = [174u8, 149u8, 49u8, 134u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -4019,183 +3351,11 @@ function delegateAccount(uint256 chainId, DelegationAccounts memory delegationAc #[inline] fn tokenize(&self) -> Self::Token<'_> { ( - as alloy_sol_types::SolType>::tokenize(&self.chainId), - ::tokenize( - &self.delegationAccounts, - ), - as alloy_sol_types::SolType>::tokenize(&self.contractAddresses), - ) - } - #[inline] - fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - delegateAccountReturn::_tokenize(ret) - } - #[inline] - fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(Into::into) - } - #[inline] - fn abi_decode_returns_validate( - data: &[u8], - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Into::into) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `getAllowAccountConsensusTxSenders(bytes32,address)` and selector `0xae953186`. -```solidity -function getAllowAccountConsensusTxSenders(bytes32 ctHandle, address accountAddress) external view returns (address[] memory); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct getAllowAccountConsensusTxSendersCall { - #[allow(missing_docs)] - pub ctHandle: alloy::sol_types::private::FixedBytes<32>, - #[allow(missing_docs)] - pub accountAddress: alloy::sol_types::private::Address, - } - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`getAllowAccountConsensusTxSenders(bytes32,address)`](getAllowAccountConsensusTxSendersCall) function. - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct getAllowAccountConsensusTxSendersReturn { - #[allow(missing_docs)] - pub _0: alloy::sol_types::private::Vec, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Address, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::FixedBytes<32>, - alloy::sol_types::private::Address, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getAllowAccountConsensusTxSendersCall) -> Self { - (value.ctHandle, value.accountAddress) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for getAllowAccountConsensusTxSendersCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - ctHandle: tuple.0, - accountAddress: tuple.1, - } - } - } - } - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Array, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Vec, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getAllowAccountConsensusTxSendersReturn) -> Self { - (value._0,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for getAllowAccountConsensusTxSendersReturn { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolCall for getAllowAccountConsensusTxSendersCall { - type Parameters<'a> = ( - alloy::sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Address, - ); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >; - type ReturnTuple<'a> = ( - alloy::sol_types::sol_data::Array, - ); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getAllowAccountConsensusTxSenders(bytes32,address)"; - const SELECTOR: [u8; 4] = [174u8, 149u8, 49u8, 134u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.ctHandle), - ::tokenize( - &self.accountAddress, + as alloy_sol_types::SolType>::tokenize(&self.ctHandle), + ::tokenize( + &self.accountAddress, ), ) } @@ -4395,196 +3555,6 @@ function getAllowPublicDecryptConsensusTxSenders(bytes32 ctHandle) external view }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `getDelegateAccountConsensusTxSenders(uint256,(address,address),address[])` and selector `0xad8b0b2b`. -```solidity -function getDelegateAccountConsensusTxSenders(uint256 chainId, DelegationAccounts memory delegationAccounts, address[] memory contractAddresses) external view returns (address[] memory); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct getDelegateAccountConsensusTxSendersCall { - #[allow(missing_docs)] - pub chainId: alloy::sol_types::private::primitives::aliases::U256, - #[allow(missing_docs)] - pub delegationAccounts: ::RustType, - #[allow(missing_docs)] - pub contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - } - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`getDelegateAccountConsensusTxSenders(uint256,(address,address),address[])`](getDelegateAccountConsensusTxSendersCall) function. - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct getDelegateAccountConsensusTxSendersReturn { - #[allow(missing_docs)] - pub _0: alloy::sol_types::private::Vec, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ::RustType, - alloy::sol_types::private::Vec, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getDelegateAccountConsensusTxSendersCall) -> Self { - (value.chainId, value.delegationAccounts, value.contractAddresses) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for getDelegateAccountConsensusTxSendersCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - chainId: tuple.0, - delegationAccounts: tuple.1, - contractAddresses: tuple.2, - } - } - } - } - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Array, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Vec, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getDelegateAccountConsensusTxSendersReturn) -> Self { - (value._0,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for getDelegateAccountConsensusTxSendersReturn { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolCall for getDelegateAccountConsensusTxSendersCall { - type Parameters<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, - ); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >; - type ReturnTuple<'a> = ( - alloy::sol_types::sol_data::Array, - ); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getDelegateAccountConsensusTxSenders(uint256,(address,address),address[])"; - const SELECTOR: [u8; 4] = [173u8, 139u8, 11u8, 43u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.chainId), - ::tokenize( - &self.delegationAccounts, - ), - as alloy_sol_types::SolType>::tokenize(&self.contractAddresses), - ) - } - #[inline] - fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - ( - as alloy_sol_types::SolType>::tokenize(ret), - ) - } - #[inline] - fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: getDelegateAccountConsensusTxSendersReturn = r.into(); - r._0 - }) - } - #[inline] - fn abi_decode_returns_validate( - data: &[u8], - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: getDelegateAccountConsensusTxSendersReturn = r.into(); - r._0 - }) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `getVersion()` and selector `0x0d8e6e2c`. ```solidity function getVersion() external pure returns (string memory); @@ -4749,166 +3719,9 @@ function initializeFromEmptyProxy() external; use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: initializeFromEmptyProxyCall) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for initializeFromEmptyProxyCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self - } - } - } - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: initializeFromEmptyProxyReturn) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for initializeFromEmptyProxyReturn { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} - } - } - } - impl initializeFromEmptyProxyReturn { - fn _tokenize( - &self, - ) -> ::ReturnToken< - '_, - > { - () - } - } - #[automatically_derived] - impl alloy_sol_types::SolCall for initializeFromEmptyProxyCall { - type Parameters<'a> = (); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = initializeFromEmptyProxyReturn; - type ReturnTuple<'a> = (); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "initializeFromEmptyProxy()"; - const SELECTOR: [u8; 4] = [57u8, 247u8, 56u8, 16u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - () - } - #[inline] - fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - initializeFromEmptyProxyReturn::_tokenize(ret) - } - #[inline] - fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(Into::into) - } - #[inline] - fn abi_decode_returns_validate( - data: &[u8], - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Into::into) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `isAccountAllowed(bytes32,address)` and selector `0xc6528f69`. -```solidity -function isAccountAllowed(bytes32 ctHandle, address accountAddress) external view returns (bool); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct isAccountAllowedCall { - #[allow(missing_docs)] - pub ctHandle: alloy::sol_types::private::FixedBytes<32>, - #[allow(missing_docs)] - pub accountAddress: alloy::sol_types::private::Address, - } - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`isAccountAllowed(bytes32,address)`](isAccountAllowedCall) function. - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct isAccountAllowedReturn { - #[allow(missing_docs)] - pub _0: bool, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Address, - ); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::FixedBytes<32>, - alloy::sol_types::private::Address, - ); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -4922,29 +3735,26 @@ function isAccountAllowed(bytes32 ctHandle, address accountAddress) external vie } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: isAccountAllowedCall) -> Self { - (value.ctHandle, value.accountAddress) + fn from(value: initializeFromEmptyProxyCall) -> Self { + () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for isAccountAllowedCall { + for initializeFromEmptyProxyCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - ctHandle: tuple.0, - accountAddress: tuple.1, - } + Self } } } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (bool,); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -4958,37 +3768,43 @@ function isAccountAllowed(bytes32 ctHandle, address accountAddress) external vie } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: isAccountAllowedReturn) -> Self { - (value._0,) + fn from(value: initializeFromEmptyProxyReturn) -> Self { + () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for isAccountAllowedReturn { + for initializeFromEmptyProxyReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } + Self {} } } } + impl initializeFromEmptyProxyReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } #[automatically_derived] - impl alloy_sol_types::SolCall for isAccountAllowedCall { - type Parameters<'a> = ( - alloy::sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Address, - ); + impl alloy_sol_types::SolCall for initializeFromEmptyProxyCall { + type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = bool; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type Return = initializeFromEmptyProxyReturn; + type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "isAccountAllowed(bytes32,address)"; - const SELECTOR: [u8; 4] = [198u8, 82u8, 143u8, 105u8]; + const SIGNATURE: &'static str = "initializeFromEmptyProxy()"; + const SELECTOR: [u8; 4] = [57u8, 247u8, 56u8, 16u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -4997,32 +3813,18 @@ function isAccountAllowed(bytes32 ctHandle, address accountAddress) external vie } #[inline] fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.ctHandle), - ::tokenize( - &self.accountAddress, - ), - ) + () } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - ( - ::tokenize( - ret, - ), - ) + initializeFromEmptyProxyReturn::_tokenize(ret) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: isAccountAllowedReturn = r.into(); - r._0 - }) + .map(Into::into) } #[inline] fn abi_decode_returns_validate( @@ -5031,37 +3833,30 @@ function isAccountAllowed(bytes32 ctHandle, address accountAddress) external vie as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: isAccountAllowedReturn = r.into(); - r._0 - }) + .map(Into::into) } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `isAccountDelegated(uint256,(address,address),address[])` and selector `0x2b13591c`. + /**Function with signature `isAccountAllowed(bytes32,address)` and selector `0xc6528f69`. ```solidity -function isAccountDelegated(uint256 chainId, DelegationAccounts memory delegationAccounts, address[] memory contractAddresses) external view returns (bool); +function isAccountAllowed(bytes32 ctHandle, address accountAddress) external view returns (bool); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct isAccountDelegatedCall { - #[allow(missing_docs)] - pub chainId: alloy::sol_types::private::primitives::aliases::U256, + pub struct isAccountAllowedCall { #[allow(missing_docs)] - pub delegationAccounts: ::RustType, + pub ctHandle: alloy::sol_types::private::FixedBytes<32>, #[allow(missing_docs)] - pub contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, + pub accountAddress: alloy::sol_types::private::Address, } #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`isAccountDelegated(uint256,(address,address),address[])`](isAccountDelegatedCall) function. + ///Container type for the return parameters of the [`isAccountAllowed(bytes32,address)`](isAccountAllowedCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct isAccountDelegatedReturn { + pub struct isAccountAllowedReturn { #[allow(missing_docs)] pub _0: bool, } @@ -5076,15 +3871,13 @@ function isAccountDelegated(uint256 chainId, DelegationAccounts memory delegatio { #[doc(hidden)] type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, + alloy::sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, ); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ::RustType, - alloy::sol_types::private::Vec, + alloy::sol_types::private::FixedBytes<32>, + alloy::sol_types::private::Address, ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] @@ -5099,21 +3892,20 @@ function isAccountDelegated(uint256 chainId, DelegationAccounts memory delegatio } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: isAccountDelegatedCall) -> Self { - (value.chainId, value.delegationAccounts, value.contractAddresses) + fn from(value: isAccountAllowedCall) -> Self { + (value.ctHandle, value.accountAddress) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for isAccountDelegatedCall { + for isAccountAllowedCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { - chainId: tuple.0, - delegationAccounts: tuple.1, - contractAddresses: tuple.2, + ctHandle: tuple.0, + accountAddress: tuple.1, } } } @@ -5136,27 +3928,26 @@ function isAccountDelegated(uint256 chainId, DelegationAccounts memory delegatio } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: isAccountDelegatedReturn) -> Self { + fn from(value: isAccountAllowedReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for isAccountDelegatedReturn { + for isAccountAllowedReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for isAccountDelegatedCall { + impl alloy_sol_types::SolCall for isAccountAllowedCall { type Parameters<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, + alloy::sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, ); type Token<'a> = = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "isAccountDelegated(uint256,(address,address),address[])"; - const SELECTOR: [u8; 4] = [43u8, 19u8, 89u8, 28u8]; + const SIGNATURE: &'static str = "isAccountAllowed(bytes32,address)"; + const SELECTOR: [u8; 4] = [198u8, 82u8, 143u8, 105u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -5177,15 +3968,12 @@ function isAccountDelegated(uint256 chainId, DelegationAccounts memory delegatio #[inline] fn tokenize(&self) -> Self::Token<'_> { ( - as alloy_sol_types::SolType>::tokenize(&self.chainId), - ::tokenize( - &self.delegationAccounts, + as alloy_sol_types::SolType>::tokenize(&self.ctHandle), + ::tokenize( + &self.accountAddress, ), - as alloy_sol_types::SolType>::tokenize(&self.contractAddresses), ) } #[inline] @@ -5202,7 +3990,7 @@ function isAccountDelegated(uint256 chainId, DelegationAccounts memory delegatio '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: isAccountDelegatedReturn = r.into(); + let r: isAccountAllowedReturn = r.into(); r._0 }) } @@ -5214,7 +4002,7 @@ function isAccountDelegated(uint256 chainId, DelegationAccounts memory delegatio '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: isAccountDelegatedReturn = r.into(); + let r: isAccountAllowedReturn = r.into(); r._0 }) } @@ -5691,24 +4479,18 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external #[allow(missing_docs)] allowPublicDecrypt(allowPublicDecryptCall), #[allow(missing_docs)] - delegateAccount(delegateAccountCall), - #[allow(missing_docs)] getAllowAccountConsensusTxSenders(getAllowAccountConsensusTxSendersCall), #[allow(missing_docs)] getAllowPublicDecryptConsensusTxSenders( getAllowPublicDecryptConsensusTxSendersCall, ), #[allow(missing_docs)] - getDelegateAccountConsensusTxSenders(getDelegateAccountConsensusTxSendersCall), - #[allow(missing_docs)] getVersion(getVersionCall), #[allow(missing_docs)] initializeFromEmptyProxy(initializeFromEmptyProxyCall), #[allow(missing_docs)] isAccountAllowed(isAccountAllowedCall), #[allow(missing_docs)] - isAccountDelegated(isAccountDelegatedCall), - #[allow(missing_docs)] isPublicDecryptAllowed(isPublicDecryptAllowedCall), #[allow(missing_docs)] proxiableUUID(proxiableUUIDCall), @@ -5727,24 +4509,21 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external [6u8, 32u8, 50u8, 109u8], [13u8, 142u8, 110u8, 44u8], [41u8, 74u8, 135u8, 5u8], - [43u8, 19u8, 89u8, 28u8], [57u8, 247u8, 56u8, 16u8], [79u8, 30u8, 242u8, 134u8], [82u8, 209u8, 144u8, 45u8], [151u8, 196u8, 154u8, 64u8], [173u8, 60u8, 177u8, 204u8], - [173u8, 139u8, 11u8, 43u8], [174u8, 149u8, 49u8, 134u8], [198u8, 82u8, 143u8, 105u8], [217u8, 7u8, 36u8, 181u8], - [244u8, 197u8, 244u8, 147u8], ]; } #[automatically_derived] impl alloy_sol_types::SolInterface for MultichainACLCalls { const NAME: &'static str = "MultichainACLCalls"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 14usize; + const COUNT: usize = 11usize; #[inline] fn selector(&self) -> [u8; 4] { match self { @@ -5757,18 +4536,12 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external Self::allowPublicDecrypt(_) => { ::SELECTOR } - Self::delegateAccount(_) => { - ::SELECTOR - } Self::getAllowAccountConsensusTxSenders(_) => { ::SELECTOR } Self::getAllowPublicDecryptConsensusTxSenders(_) => { ::SELECTOR } - Self::getDelegateAccountConsensusTxSenders(_) => { - ::SELECTOR - } Self::getVersion(_) => { ::SELECTOR } @@ -5778,9 +4551,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external Self::isAccountAllowed(_) => { ::SELECTOR } - Self::isAccountDelegated(_) => { - ::SELECTOR - } Self::isPublicDecryptAllowed(_) => { ::SELECTOR } @@ -5842,17 +4612,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external } allowAccount }, - { - fn isAccountDelegated( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(MultichainACLCalls::isAccountDelegated) - } - isAccountDelegated - }, { fn initializeFromEmptyProxy( data: &[u8], @@ -5910,19 +4669,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external } UPGRADE_INTERFACE_VERSION }, - { - fn getDelegateAccountConsensusTxSenders( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map( - MultichainACLCalls::getDelegateAccountConsensusTxSenders, - ) - } - getDelegateAccountConsensusTxSenders - }, { fn getAllowAccountConsensusTxSenders( data: &[u8], @@ -5956,17 +4702,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external } allowPublicDecrypt }, - { - fn delegateAccount( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(MultichainACLCalls::delegateAccount) - } - delegateAccount - }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { return Err( @@ -6020,17 +4755,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external } allowAccount }, - { - fn isAccountDelegated( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(MultichainACLCalls::isAccountDelegated) - } - isAccountDelegated - }, { fn initializeFromEmptyProxy( data: &[u8], @@ -6088,19 +4812,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external } UPGRADE_INTERFACE_VERSION }, - { - fn getDelegateAccountConsensusTxSenders( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map( - MultichainACLCalls::getDelegateAccountConsensusTxSenders, - ) - } - getDelegateAccountConsensusTxSenders - }, { fn getAllowAccountConsensusTxSenders( data: &[u8], @@ -6134,17 +4845,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external } allowPublicDecrypt }, - { - fn delegateAccount( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(MultichainACLCalls::delegateAccount) - } - delegateAccount - }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { return Err( @@ -6174,11 +4874,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external inner, ) } - Self::delegateAccount(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::getAllowAccountConsensusTxSenders(inner) => { ::abi_encoded_size( inner, @@ -6189,11 +4884,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external inner, ) } - Self::getDelegateAccountConsensusTxSenders(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::getVersion(inner) => { ::abi_encoded_size(inner) } @@ -6207,11 +4897,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external inner, ) } - Self::isAccountDelegated(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::isPublicDecryptAllowed(inner) => { ::abi_encoded_size( inner, @@ -6250,12 +4935,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external out, ) } - Self::delegateAccount(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::getAllowAccountConsensusTxSenders(inner) => { ::abi_encode_raw( inner, @@ -6268,12 +4947,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external out, ) } - Self::getDelegateAccountConsensusTxSenders(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::getVersion(inner) => { ::abi_encode_raw( inner, @@ -6292,12 +4965,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external out, ) } - Self::isAccountDelegated(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::isPublicDecryptAllowed(inner) => { ::abi_encode_raw( inner, @@ -6332,8 +4999,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external #[allow(missing_docs)] CoprocessorAlreadyAllowedPublicDecrypt(CoprocessorAlreadyAllowedPublicDecrypt), #[allow(missing_docs)] - CoprocessorAlreadyDelegated(CoprocessorAlreadyDelegated), - #[allow(missing_docs)] ERC1967InvalidImplementation(ERC1967InvalidImplementation), #[allow(missing_docs)] ERC1967NonPayable(ERC1967NonPayable), @@ -6377,7 +5042,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external /// /// Prefer using `SolInterface` methods instead. pub const SELECTORS: &'static [[u8; 4usize]] = &[ - [12u8, 198u8, 149u8, 173u8], [14u8, 86u8, 207u8, 61u8], [38u8, 205u8, 117u8, 220u8], [42u8, 124u8, 110u8, 246u8], @@ -6405,7 +5069,7 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external impl alloy_sol_types::SolInterface for MultichainACLErrors { const NAME: &'static str = "MultichainACLErrors"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 22usize; + const COUNT: usize = 21usize; #[inline] fn selector(&self) -> [u8; 4] { match self { @@ -6421,9 +5085,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external Self::CoprocessorAlreadyAllowedPublicDecrypt(_) => { ::SELECTOR } - Self::CoprocessorAlreadyDelegated(_) => { - ::SELECTOR - } Self::ERC1967InvalidImplementation(_) => { ::SELECTOR } @@ -6494,17 +5155,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external static DECODE_SHIMS: &[fn( &[u8], ) -> alloy_sol_types::Result] = &[ - { - fn CoprocessorAlreadyDelegated( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(MultichainACLErrors::CoprocessorAlreadyDelegated) - } - CoprocessorAlreadyDelegated - }, { fn NotGatewayOwner( data: &[u8], @@ -6754,17 +5404,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external static DECODE_VALIDATE_SHIMS: &[fn( &[u8], ) -> alloy_sol_types::Result] = &[ - { - fn CoprocessorAlreadyDelegated( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(MultichainACLErrors::CoprocessorAlreadyDelegated) - } - CoprocessorAlreadyDelegated - }, { fn NotGatewayOwner( data: &[u8], @@ -7032,11 +5671,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external inner, ) } - Self::CoprocessorAlreadyDelegated(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::ERC1967InvalidImplementation(inner) => { ::abi_encoded_size( inner, @@ -7147,12 +5781,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external out, ) } - Self::CoprocessorAlreadyDelegated(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::ERC1967InvalidImplementation(inner) => { ::abi_encode_raw( inner, @@ -7264,8 +5892,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external #[allow(missing_docs)] AllowPublicDecrypt(AllowPublicDecrypt), #[allow(missing_docs)] - DelegateAccount(DelegateAccount), - #[allow(missing_docs)] Initialized(Initialized), #[allow(missing_docs)] Upgraded(Upgraded), @@ -7279,11 +5905,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external /// /// Prefer using `SolInterface` methods instead. pub const SELECTORS: &'static [[u8; 32usize]] = &[ - [ - 6u8, 193u8, 49u8, 85u8, 207u8, 169u8, 3u8, 67u8, 203u8, 79u8, 186u8, - 24u8, 12u8, 232u8, 211u8, 131u8, 180u8, 245u8, 106u8, 91u8, 199u8, 170u8, - 192u8, 229u8, 216u8, 241u8, 148u8, 182u8, 70u8, 114u8, 165u8, 30u8, - ], [ 8u8, 104u8, 236u8, 167u8, 81u8, 38u8, 186u8, 10u8, 70u8, 187u8, 236u8, 94u8, 239u8, 168u8, 131u8, 226u8, 10u8, 19u8, 230u8, 199u8, 217u8, 54u8, @@ -7309,7 +5930,7 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external #[automatically_derived] impl alloy_sol_types::SolEventInterface for MultichainACLEvents { const NAME: &'static str = "MultichainACLEvents"; - const COUNT: usize = 5usize; + const COUNT: usize = 4usize; fn decode_raw_log( topics: &[alloy_sol_types::Word], data: &[u8], @@ -7331,13 +5952,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external ) .map(Self::AllowPublicDecrypt) } - Some(::SIGNATURE_HASH) => { - ::decode_raw_log( - topics, - data, - ) - .map(Self::DelegateAccount) - } Some(::SIGNATURE_HASH) => { ::decode_raw_log( topics, @@ -7373,9 +5987,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external Self::AllowPublicDecrypt(inner) => { alloy_sol_types::private::IntoLogData::to_log_data(inner) } - Self::DelegateAccount(inner) => { - alloy_sol_types::private::IntoLogData::to_log_data(inner) - } Self::Initialized(inner) => { alloy_sol_types::private::IntoLogData::to_log_data(inner) } @@ -7392,9 +6003,6 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external Self::AllowPublicDecrypt(inner) => { alloy_sol_types::private::IntoLogData::into_log_data(inner) } - Self::DelegateAccount(inner) => { - alloy_sol_types::private::IntoLogData::into_log_data(inner) - } Self::Initialized(inner) => { alloy_sol_types::private::IntoLogData::into_log_data(inner) } @@ -7597,23 +6205,6 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ }, ) } - ///Creates a new call builder for the [`delegateAccount`] function. - pub fn delegateAccount( - &self, - chainId: alloy::sol_types::private::primitives::aliases::U256, - delegationAccounts: ::RustType, - contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - ) -> alloy_contract::SolCallBuilder<&P, delegateAccountCall, N> { - self.call_builder( - &delegateAccountCall { - chainId, - delegationAccounts, - contractAddresses, - }, - ) - } ///Creates a new call builder for the [`getAllowAccountConsensusTxSenders`] function. pub fn getAllowAccountConsensusTxSenders( &self, @@ -7646,27 +6237,6 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ }, ) } - ///Creates a new call builder for the [`getDelegateAccountConsensusTxSenders`] function. - pub fn getDelegateAccountConsensusTxSenders( - &self, - chainId: alloy::sol_types::private::primitives::aliases::U256, - delegationAccounts: ::RustType, - contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - ) -> alloy_contract::SolCallBuilder< - &P, - getDelegateAccountConsensusTxSendersCall, - N, - > { - self.call_builder( - &getDelegateAccountConsensusTxSendersCall { - chainId, - delegationAccounts, - contractAddresses, - }, - ) - } ///Creates a new call builder for the [`getVersion`] function. pub fn getVersion( &self, @@ -7692,23 +6262,6 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ }, ) } - ///Creates a new call builder for the [`isAccountDelegated`] function. - pub fn isAccountDelegated( - &self, - chainId: alloy::sol_types::private::primitives::aliases::U256, - delegationAccounts: ::RustType, - contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - ) -> alloy_contract::SolCallBuilder<&P, isAccountDelegatedCall, N> { - self.call_builder( - &isAccountDelegatedCall { - chainId, - delegationAccounts, - contractAddresses, - }, - ) - } ///Creates a new call builder for the [`isPublicDecryptAllowed`] function. pub fn isPublicDecryptAllowed( &self, @@ -7765,12 +6318,6 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::Event<&P, AllowPublicDecrypt, N> { self.event_filter::() } - ///Creates a new event filter for the [`DelegateAccount`] event. - pub fn DelegateAccount_filter( - &self, - ) -> alloy_contract::Event<&P, DelegateAccount, N> { - self.event_filter::() - } ///Creates a new event filter for the [`Initialized`] event. pub fn Initialized_filter(&self) -> alloy_contract::Event<&P, Initialized, N> { self.event_filter::() diff --git a/gateway-contracts/rust_bindings/src/multichain_acl_checks.rs b/gateway-contracts/rust_bindings/src/multichain_acl_checks.rs index 8cc520ce6..49cd711e3 100644 --- a/gateway-contracts/rust_bindings/src/multichain_acl_checks.rs +++ b/gateway-contracts/rust_bindings/src/multichain_acl_checks.rs @@ -3,13 +3,7 @@ Generated by the following Solidity interface... ```solidity interface MultichainACLChecks { - struct DelegationAccounts { - address delegatorAddress; - address delegatedAddress; - } - error AccountNotAllowedToUseCiphertext(bytes32 ctHandle, address accountAddress); - error AccountNotDelegatedForContracts(uint256 chainId, DelegationAccounts delegationAccounts, address[] contractAddresses); error PublicDecryptNotAllowed(bytes32 ctHandle); } ``` @@ -33,39 +27,6 @@ interface MultichainACLChecks { } ] }, - { - "type": "error", - "name": "AccountNotDelegatedForContracts", - "inputs": [ - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "delegationAccounts", - "type": "tuple", - "internalType": "struct DelegationAccounts", - "components": [ - { - "name": "delegatorAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "delegatedAddress", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "contractAddresses", - "type": "address[]", - "internalType": "address[]" - } - ] - }, { "type": "error", "name": "PublicDecryptNotAllowed", @@ -111,226 +72,6 @@ pub mod MultichainACLChecks { ); #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**```solidity -struct DelegationAccounts { address delegatorAddress; address delegatedAddress; } -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct DelegationAccounts { - #[allow(missing_docs)] - pub delegatorAddress: alloy::sol_types::private::Address, - #[allow(missing_docs)] - pub delegatedAddress: alloy::sol_types::private::Address, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Address, - alloy::sol_types::sol_data::Address, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::Address, - alloy::sol_types::private::Address, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: DelegationAccounts) -> Self { - (value.delegatorAddress, value.delegatedAddress) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for DelegationAccounts { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - delegatorAddress: tuple.0, - delegatedAddress: tuple.1, - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolValue for DelegationAccounts { - type SolType = Self; - } - #[automatically_derived] - impl alloy_sol_types::private::SolTypeValue for DelegationAccounts { - #[inline] - fn stv_to_tokens(&self) -> ::Token<'_> { - ( - ::tokenize( - &self.delegatorAddress, - ), - ::tokenize( - &self.delegatedAddress, - ), - ) - } - #[inline] - fn stv_abi_encoded_size(&self) -> usize { - if let Some(size) = ::ENCODED_SIZE { - return size; - } - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_encoded_size(&tuple) - } - #[inline] - fn stv_eip712_data_word(&self) -> alloy_sol_types::Word { - ::eip712_hash_struct(self) - } - #[inline] - fn stv_abi_encode_packed_to( - &self, - out: &mut alloy_sol_types::private::Vec, - ) { - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out) - } - #[inline] - fn stv_abi_packed_encoded_size(&self) -> usize { - if let Some(size) = ::PACKED_ENCODED_SIZE { - return size; - } - let tuple = as ::core::convert::From>::from(self.clone()); - as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple) - } - } - #[automatically_derived] - impl alloy_sol_types::SolType for DelegationAccounts { - type RustType = Self; - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SOL_NAME: &'static str = ::NAME; - const ENCODED_SIZE: Option = as alloy_sol_types::SolType>::ENCODED_SIZE; - const PACKED_ENCODED_SIZE: Option = as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE; - #[inline] - fn valid_token(token: &Self::Token<'_>) -> bool { - as alloy_sol_types::SolType>::valid_token(token) - } - #[inline] - fn detokenize(token: Self::Token<'_>) -> Self::RustType { - let tuple = as alloy_sol_types::SolType>::detokenize(token); - >>::from(tuple) - } - } - #[automatically_derived] - impl alloy_sol_types::SolStruct for DelegationAccounts { - const NAME: &'static str = "DelegationAccounts"; - #[inline] - fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> { - alloy_sol_types::private::Cow::Borrowed( - "DelegationAccounts(address delegatorAddress,address delegatedAddress)", - ) - } - #[inline] - fn eip712_components() -> alloy_sol_types::private::Vec< - alloy_sol_types::private::Cow<'static, str>, - > { - alloy_sol_types::private::Vec::new() - } - #[inline] - fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> { - ::eip712_root_type() - } - #[inline] - fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec { - [ - ::eip712_data_word( - &self.delegatorAddress, - ) - .0, - ::eip712_data_word( - &self.delegatedAddress, - ) - .0, - ] - .concat() - } - } - #[automatically_derived] - impl alloy_sol_types::EventTopic for DelegationAccounts { - #[inline] - fn topic_preimage_length(rust: &Self::RustType) -> usize { - 0usize - + ::topic_preimage_length( - &rust.delegatorAddress, - ) - + ::topic_preimage_length( - &rust.delegatedAddress, - ) - } - #[inline] - fn encode_topic_preimage( - rust: &Self::RustType, - out: &mut alloy_sol_types::private::Vec, - ) { - out.reserve( - ::topic_preimage_length(rust), - ); - ::encode_topic_preimage( - &rust.delegatorAddress, - out, - ); - ::encode_topic_preimage( - &rust.delegatedAddress, - out, - ); - } - #[inline] - fn encode_topic( - rust: &Self::RustType, - ) -> alloy_sol_types::abi::token::WordToken { - let mut out = alloy_sol_types::private::Vec::new(); - ::encode_topic_preimage( - rust, - &mut out, - ); - alloy_sol_types::abi::token::WordToken( - alloy_sol_types::private::keccak256(out), - ) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Custom error with signature `AccountNotAllowedToUseCiphertext(bytes32,address)` and selector `0x160a2b4b`. ```solidity error AccountNotAllowedToUseCiphertext(bytes32 ctHandle, address accountAddress); @@ -427,112 +168,6 @@ error AccountNotAllowedToUseCiphertext(bytes32 ctHandle, address accountAddress) }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `AccountNotDelegatedForContracts(uint256,(address,address),address[])` and selector `0x080a113f`. -```solidity -error AccountNotDelegatedForContracts(uint256 chainId, DelegationAccounts delegationAccounts, address[] contractAddresses); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct AccountNotDelegatedForContracts { - #[allow(missing_docs)] - pub chainId: alloy::sol_types::private::primitives::aliases::U256, - #[allow(missing_docs)] - pub delegationAccounts: ::RustType, - #[allow(missing_docs)] - pub contractAddresses: alloy::sol_types::private::Vec< - alloy::sol_types::private::Address, - >, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - DelegationAccounts, - alloy::sol_types::sol_data::Array, - ); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ::RustType, - alloy::sol_types::private::Vec, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: AccountNotDelegatedForContracts) -> Self { - (value.chainId, value.delegationAccounts, value.contractAddresses) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for AccountNotDelegatedForContracts { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - chainId: tuple.0, - delegationAccounts: tuple.1, - contractAddresses: tuple.2, - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolError for AccountNotDelegatedForContracts { - type Parameters<'a> = UnderlyingSolTuple<'a>; - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "AccountNotDelegatedForContracts(uint256,(address,address),address[])"; - const SELECTOR: [u8; 4] = [8u8, 10u8, 17u8, 63u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.chainId), - ::tokenize( - &self.delegationAccounts, - ), - as alloy_sol_types::SolType>::tokenize(&self.contractAddresses), - ) - } - #[inline] - fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Self::new) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Custom error with signature `PublicDecryptNotAllowed(bytes32)` and selector `0x4331a85d`. ```solidity error PublicDecryptNotAllowed(bytes32 ctHandle); @@ -618,8 +253,6 @@ error PublicDecryptNotAllowed(bytes32 ctHandle); #[allow(missing_docs)] AccountNotAllowedToUseCiphertext(AccountNotAllowedToUseCiphertext), #[allow(missing_docs)] - AccountNotDelegatedForContracts(AccountNotDelegatedForContracts), - #[allow(missing_docs)] PublicDecryptNotAllowed(PublicDecryptNotAllowed), } #[automatically_derived] @@ -631,7 +264,6 @@ error PublicDecryptNotAllowed(bytes32 ctHandle); /// /// Prefer using `SolInterface` methods instead. pub const SELECTORS: &'static [[u8; 4usize]] = &[ - [8u8, 10u8, 17u8, 63u8], [22u8, 10u8, 43u8, 75u8], [67u8, 49u8, 168u8, 93u8], ]; @@ -640,16 +272,13 @@ error PublicDecryptNotAllowed(bytes32 ctHandle); impl alloy_sol_types::SolInterface for MultichainACLChecksErrors { const NAME: &'static str = "MultichainACLChecksErrors"; const MIN_DATA_LENGTH: usize = 32usize; - const COUNT: usize = 3usize; + const COUNT: usize = 2usize; #[inline] fn selector(&self) -> [u8; 4] { match self { Self::AccountNotAllowedToUseCiphertext(_) => { ::SELECTOR } - Self::AccountNotDelegatedForContracts(_) => { - ::SELECTOR - } Self::PublicDecryptNotAllowed(_) => { ::SELECTOR } @@ -672,19 +301,6 @@ error PublicDecryptNotAllowed(bytes32 ctHandle); static DECODE_SHIMS: &[fn( &[u8], ) -> alloy_sol_types::Result] = &[ - { - fn AccountNotDelegatedForContracts( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map( - MultichainACLChecksErrors::AccountNotDelegatedForContracts, - ) - } - AccountNotDelegatedForContracts - }, { fn AccountNotAllowedToUseCiphertext( data: &[u8], @@ -729,19 +345,6 @@ error PublicDecryptNotAllowed(bytes32 ctHandle); static DECODE_VALIDATE_SHIMS: &[fn( &[u8], ) -> alloy_sol_types::Result] = &[ - { - fn AccountNotDelegatedForContracts( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map( - MultichainACLChecksErrors::AccountNotDelegatedForContracts, - ) - } - AccountNotDelegatedForContracts - }, { fn AccountNotAllowedToUseCiphertext( data: &[u8], @@ -785,11 +388,6 @@ error PublicDecryptNotAllowed(bytes32 ctHandle); inner, ) } - Self::AccountNotDelegatedForContracts(inner) => { - ::abi_encoded_size( - inner, - ) - } Self::PublicDecryptNotAllowed(inner) => { ::abi_encoded_size( inner, @@ -806,12 +404,6 @@ error PublicDecryptNotAllowed(bytes32 ctHandle); out, ) } - Self::AccountNotDelegatedForContracts(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } Self::PublicDecryptNotAllowed(inner) => { ::abi_encode_raw( inner, diff --git a/gateway-contracts/selectors.txt b/gateway-contracts/selectors.txt index c7a37b2af..65d97358b 100644 --- a/gateway-contracts/selectors.txt +++ b/gateway-contracts/selectors.txt @@ -71,157 +71,149 @@ CiphertextCommits Decryption -ā•­----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------ā•® -| Type | Signature | Selector | -+===============================================================================================================================================================================================================+ -| Function | UPGRADE_INTERFACE_VERSION() | 0xad3cb1cc | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | delegatedUserDecryptionRequest((bytes32,address)[],(uint256,uint256),(address,address),(uint256,address[]),bytes,bytes,bytes) | 0x9fad5a2f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | eip712Domain() | 0x84b0196e | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getDecryptionConsensusTxSenders(uint256) | 0x0900cc69 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getVersion() | 0x0d8e6e2c | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | initializeFromEmptyProxy() | 0x39f73810 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isDecryptionDone(uint256) | 0x58f5b8ab | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isDelegatedUserDecryptionReady(uint256,(address,address),(bytes32,address)[],address[],bytes) | 0xb6e9a9b3 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isPublicDecryptionReady(bytes32[],bytes) | 0x4014c4cd | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isUserDecryptionReady(address,(bytes32,address)[],bytes) | 0xfbb83259 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | pause() | 0x8456cb59 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | paused() | 0x5c975abb | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | proxiableUUID() | 0x52d1902d | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | publicDecryptionRequest(bytes32[],bytes) | 0xd8998f45 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | publicDecryptionResponse(uint256,bytes,bytes,bytes) | 0x6f8913bc | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | unpause() | 0x3f4ba83a | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | upgradeToAndCall(address,bytes) | 0x4f1ef286 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | userDecryptionRequest((bytes32,address)[],(uint256,uint256),(uint256,address[]),address,bytes,bytes,bytes) | 0xf1b57adb | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | userDecryptionResponse(uint256,bytes,bytes,bytes) | 0x046f9eb3 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | EIP712DomainChanged() | 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | Initialized(uint64) | 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | Paused(address) | 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | PublicDecryptionRequest(uint256,(bytes32,uint256,bytes32,address[])[],bytes) | 0x22db480a39bd72556438aadb4a32a3d2a6638b87c03bbec5fef6997e109587ff | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | PublicDecryptionResponse(uint256,bytes,bytes[],bytes) | 0xd7e58a367a0a6c298e76ad5d240004e327aa1423cbe4bd7ff85d4c715ef8d15f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | Unpaused(address) | 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | Upgraded(address) | 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | UserDecryptionRequest(uint256,(bytes32,uint256,bytes32,address[])[],address,bytes,bytes) | 0xf9011bd6ba0da6049c520d70fe5971f17ed7ab795486052544b51019896c596b | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | UserDecryptionResponse(uint256,uint256,bytes,bytes,bytes) | 0x7fcdfb5381917f554a717d0a5470a33f5a49ba6445f05ec43c74c0bc2cc608b2 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | UserDecryptionResponseThresholdReached(uint256) | 0xe89752be0ecdb68b2a6eb5ef1a891039e0e92ae3c8a62274c5881e48eea1ed25 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | AccountNotAllowedToUseCiphertext(bytes32,address) | 0x160a2b4b | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | AccountNotDelegatedForContracts(uint256,(address,address),address[]) | 0x080a113f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | AddressEmptyCode(address) | 0x9996b315 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ContractAddressesMaxLengthExceeded(uint256,uint256) | 0xaf1f0495 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ContractNotInContractAddresses(address,address[]) | 0xa4c30391 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | DecryptionNotRequested(uint256) | 0xd48af942 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | DelegatorAddressInContractAddresses(address,address[]) | 0xc3446ac7 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | DifferentKeyIdsNotAllowed((bytes32,uint256,bytes32,address[]),(bytes32,uint256,bytes32,address[])) | 0xcfae921f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ECDSAInvalidSignature() | 0xf645eedf | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ECDSAInvalidSignatureLength(uint256) | 0xfce698f7 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ECDSAInvalidSignatureS(bytes32) | 0xd78bce0c | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ERC1967InvalidImplementation(address) | 0x4c9c8ce3 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ERC1967NonPayable() | 0xb398979f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | EmptyContractAddresses() | 0x57cfa217 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | EmptyCtHandleContractPairs() | 0xa6a6cb21 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | EmptyCtHandles() | 0x2de75438 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | EnforcedPause() | 0xd93c0665 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ExpectedPause() | 0x8dfc202b | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | FailedCall() | 0xd6bda275 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | HostChainNotRegistered(uint256) | 0xb6679c3b | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | InvalidFHEType(uint8) | 0x641950d7 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | InvalidInitialization() | 0xf92ee8a9 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | InvalidNullDurationDays() | 0xde2859c1 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | InvalidUserSignature(bytes) | 0x2a873d27 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | KmsNodeAlreadySigned(uint256,address) | 0x99ec48d9 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | MaxDecryptionRequestBitSizeExceeded(uint256,uint256) | 0xe7f4895d | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | MaxDurationDaysExceeded(uint256,uint256) | 0x32951863 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotCoprocessorSigner(address) | 0x26cd75dc | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotCoprocessorTxSender(address) | 0x52d725f5 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotCustodianSigner(address) | 0x391672a7 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotCustodianTxSender(address) | 0xf924a0cf | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotGatewayOwner(address) | 0x0e56cf3d | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotInitializing() | 0xd7e6bcf8 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotInitializingFromEmptyProxy() | 0x6f4f731f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotKmsSigner(address) | 0x2a7c6ef6 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotKmsTxSender(address) | 0xaee86323 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotOwnerOrGatewayConfig(address) | 0xe19166ee | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotPauserOrGatewayConfig(address) | 0x388916bb | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | PublicDecryptNotAllowed(bytes32) | 0x4331a85d | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | StartTimestampInFuture(uint256,uint256) | 0xf24c0887 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | UUPSUnauthorizedCallContext() | 0xe07c8dba | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | UUPSUnsupportedProxiableUUID(bytes32) | 0xaa1d49a4 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | UnsupportedFHEType(uint8) | 0xbe7830b1 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | UserAddressInContractAddresses(address,address[]) | 0xdc4d78b1 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | UserDecryptionRequestExpired(uint256,(uint256,uint256)) | 0x30348040 | -ā•°----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------╯ +ā•­----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------ā•® +| Type | Signature | Selector | ++============================================================================================================================================================================================+ +| Function | UPGRADE_INTERFACE_VERSION() | 0xad3cb1cc | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | eip712Domain() | 0x84b0196e | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | getDecryptionConsensusTxSenders(uint256) | 0x0900cc69 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | getVersion() | 0x0d8e6e2c | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | initializeFromEmptyProxy() | 0x39f73810 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | isDecryptionDone(uint256) | 0x58f5b8ab | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | isPublicDecryptionReady(bytes32[],bytes) | 0x4014c4cd | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | isUserDecryptionReady(address,(bytes32,address)[],bytes) | 0xfbb83259 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | pause() | 0x8456cb59 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | paused() | 0x5c975abb | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | proxiableUUID() | 0x52d1902d | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | publicDecryptionRequest(bytes32[],bytes) | 0xd8998f45 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | publicDecryptionResponse(uint256,bytes,bytes,bytes) | 0x6f8913bc | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | unpause() | 0x3f4ba83a | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | upgradeToAndCall(address,bytes) | 0x4f1ef286 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | userDecryptionRequest((bytes32,address)[],(uint256,uint256),(uint256,address[]),address,bytes,bytes,bytes) | 0xf1b57adb | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | userDecryptionResponse(uint256,bytes,bytes,bytes) | 0x046f9eb3 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | EIP712DomainChanged() | 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | Initialized(uint64) | 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | Paused(address) | 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | PublicDecryptionRequest(uint256,(bytes32,uint256,bytes32,address[])[],bytes) | 0x22db480a39bd72556438aadb4a32a3d2a6638b87c03bbec5fef6997e109587ff | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | PublicDecryptionResponse(uint256,bytes,bytes[],bytes) | 0xd7e58a367a0a6c298e76ad5d240004e327aa1423cbe4bd7ff85d4c715ef8d15f | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | Unpaused(address) | 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | Upgraded(address) | 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | UserDecryptionRequest(uint256,(bytes32,uint256,bytes32,address[])[],address,bytes,bytes) | 0xf9011bd6ba0da6049c520d70fe5971f17ed7ab795486052544b51019896c596b | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | UserDecryptionResponse(uint256,uint256,bytes,bytes,bytes) | 0x7fcdfb5381917f554a717d0a5470a33f5a49ba6445f05ec43c74c0bc2cc608b2 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | UserDecryptionResponseThresholdReached(uint256) | 0xe89752be0ecdb68b2a6eb5ef1a891039e0e92ae3c8a62274c5881e48eea1ed25 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | AccountNotAllowedToUseCiphertext(bytes32,address) | 0x160a2b4b | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | AddressEmptyCode(address) | 0x9996b315 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ContractAddressesMaxLengthExceeded(uint256,uint256) | 0xaf1f0495 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ContractNotInContractAddresses(address,address[]) | 0xa4c30391 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | DecryptionNotRequested(uint256) | 0xd48af942 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | DifferentKeyIdsNotAllowed((bytes32,uint256,bytes32,address[]),(bytes32,uint256,bytes32,address[])) | 0xcfae921f | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ECDSAInvalidSignature() | 0xf645eedf | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ECDSAInvalidSignatureLength(uint256) | 0xfce698f7 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ECDSAInvalidSignatureS(bytes32) | 0xd78bce0c | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ERC1967InvalidImplementation(address) | 0x4c9c8ce3 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ERC1967NonPayable() | 0xb398979f | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | EmptyContractAddresses() | 0x57cfa217 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | EmptyCtHandleContractPairs() | 0xa6a6cb21 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | EmptyCtHandles() | 0x2de75438 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | EnforcedPause() | 0xd93c0665 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ExpectedPause() | 0x8dfc202b | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | FailedCall() | 0xd6bda275 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | HostChainNotRegistered(uint256) | 0xb6679c3b | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | InvalidFHEType(uint8) | 0x641950d7 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | InvalidInitialization() | 0xf92ee8a9 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | InvalidNullDurationDays() | 0xde2859c1 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | InvalidUserSignature(bytes) | 0x2a873d27 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | KmsNodeAlreadySigned(uint256,address) | 0x99ec48d9 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | MaxDecryptionRequestBitSizeExceeded(uint256,uint256) | 0xe7f4895d | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | MaxDurationDaysExceeded(uint256,uint256) | 0x32951863 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotCoprocessorSigner(address) | 0x26cd75dc | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotCoprocessorTxSender(address) | 0x52d725f5 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotCustodianSigner(address) | 0x391672a7 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotCustodianTxSender(address) | 0xf924a0cf | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotGatewayOwner(address) | 0x0e56cf3d | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotInitializing() | 0xd7e6bcf8 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotInitializingFromEmptyProxy() | 0x6f4f731f | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotKmsSigner(address) | 0x2a7c6ef6 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotKmsTxSender(address) | 0xaee86323 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotOwnerOrGatewayConfig(address) | 0xe19166ee | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotPauserOrGatewayConfig(address) | 0x388916bb | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | PublicDecryptNotAllowed(bytes32) | 0x4331a85d | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | StartTimestampInFuture(uint256,uint256) | 0xf24c0887 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | UUPSUnauthorizedCallContext() | 0xe07c8dba | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | UUPSUnsupportedProxiableUUID(bytes32) | 0xaa1d49a4 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | UnsupportedFHEType(uint8) | 0xbe7830b1 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | UserAddressInContractAddresses(address,address[]) | 0xdc4d78b1 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | UserDecryptionRequestExpired(uint256,(uint256,uint256)) | 0x30348040 | +ā•°----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------╯ GatewayConfig @@ -609,91 +601,81 @@ KMSGeneration MultichainACL -ā•­----------+---------------------------------------------------------------------------+--------------------------------------------------------------------ā•® -| Type | Signature | Selector | -+===========================================================================================================================================================+ -| Function | UPGRADE_INTERFACE_VERSION() | 0xad3cb1cc | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | allowAccount(bytes32,address,bytes) | 0x294a8705 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | allowPublicDecrypt(bytes32,bytes) | 0xd90724b5 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | delegateAccount(uint256,(address,address),address[]) | 0xf4c5f493 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getAllowAccountConsensusTxSenders(bytes32,address) | 0xae953186 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getAllowPublicDecryptConsensusTxSenders(bytes32) | 0x97c49a40 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getDelegateAccountConsensusTxSenders(uint256,(address,address),address[]) | 0xad8b0b2b | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getVersion() | 0x0d8e6e2c | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | initializeFromEmptyProxy() | 0x39f73810 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isAccountAllowed(bytes32,address) | 0xc6528f69 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isAccountDelegated(uint256,(address,address),address[]) | 0x2b13591c | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isPublicDecryptAllowed(bytes32) | 0x0620326d | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | proxiableUUID() | 0x52d1902d | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | upgradeToAndCall(address,bytes) | 0x4f1ef286 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | AllowAccount(bytes32,address) | 0x18f825f318ffa4ed5bf3f6ed24fd54d33378b0e9f16ddb37c3419691b2e16566 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | AllowPublicDecrypt(bytes32) | 0x0868eca75126ba0a46bbec5eefa883e20a13e6c7d936c9bf47ed886e2eb43d3a | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | DelegateAccount(uint256,(address,address),address[]) | 0x06c13155cfa90343cb4fba180ce8d383b4f56a5bc7aac0e5d8f194b64672a51e | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | Initialized(uint64) | 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | Upgraded(address) | 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | AddressEmptyCode(address) | 0x9996b315 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ContractsMaxLengthExceeded(uint256,uint256) | 0xa7db2751 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | CoprocessorAlreadyAllowedAccount(bytes32,address,address) | 0x6637e32d | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | CoprocessorAlreadyAllowedPublicDecrypt(bytes32,address) | 0xa6f04d26 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | CoprocessorAlreadyDelegated(uint256,(address,address),address[],address) | 0x0cc695ad | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ERC1967InvalidImplementation(address) | 0x4c9c8ce3 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ERC1967NonPayable() | 0xb398979f | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | EmptyContractAddresses() | 0x57cfa217 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | FailedCall() | 0xd6bda275 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | HostChainNotRegistered(uint256) | 0xb6679c3b | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | InvalidInitialization() | 0xf92ee8a9 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotCoprocessorSigner(address) | 0x26cd75dc | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotCoprocessorTxSender(address) | 0x52d725f5 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotCustodianSigner(address) | 0x391672a7 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotCustodianTxSender(address) | 0xf924a0cf | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotGatewayOwner(address) | 0x0e56cf3d | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotInitializing() | 0xd7e6bcf8 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotInitializingFromEmptyProxy() | 0x6f4f731f | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotKmsSigner(address) | 0x2a7c6ef6 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotKmsTxSender(address) | 0xaee86323 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | UUPSUnauthorizedCallContext() | 0xe07c8dba | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | UUPSUnsupportedProxiableUUID(bytes32) | 0xaa1d49a4 | -ā•°----------+---------------------------------------------------------------------------+--------------------------------------------------------------------╯ +ā•­----------+-----------------------------------------------------------+--------------------------------------------------------------------ā•® +| Type | Signature | Selector | ++===========================================================================================================================================+ +| Function | UPGRADE_INTERFACE_VERSION() | 0xad3cb1cc | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | allowAccount(bytes32,address,bytes) | 0x294a8705 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | allowPublicDecrypt(bytes32,bytes) | 0xd90724b5 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | getAllowAccountConsensusTxSenders(bytes32,address) | 0xae953186 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | getAllowPublicDecryptConsensusTxSenders(bytes32) | 0x97c49a40 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | getVersion() | 0x0d8e6e2c | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | initializeFromEmptyProxy() | 0x39f73810 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | isAccountAllowed(bytes32,address) | 0xc6528f69 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | isPublicDecryptAllowed(bytes32) | 0x0620326d | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | proxiableUUID() | 0x52d1902d | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | upgradeToAndCall(address,bytes) | 0x4f1ef286 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Event | AllowAccount(bytes32,address) | 0x18f825f318ffa4ed5bf3f6ed24fd54d33378b0e9f16ddb37c3419691b2e16566 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Event | AllowPublicDecrypt(bytes32) | 0x0868eca75126ba0a46bbec5eefa883e20a13e6c7d936c9bf47ed886e2eb43d3a | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Event | Initialized(uint64) | 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Event | Upgraded(address) | 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | AddressEmptyCode(address) | 0x9996b315 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | ContractsMaxLengthExceeded(uint256,uint256) | 0xa7db2751 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | CoprocessorAlreadyAllowedAccount(bytes32,address,address) | 0x6637e32d | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | CoprocessorAlreadyAllowedPublicDecrypt(bytes32,address) | 0xa6f04d26 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | ERC1967InvalidImplementation(address) | 0x4c9c8ce3 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | ERC1967NonPayable() | 0xb398979f | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | EmptyContractAddresses() | 0x57cfa217 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | FailedCall() | 0xd6bda275 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | HostChainNotRegistered(uint256) | 0xb6679c3b | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | InvalidInitialization() | 0xf92ee8a9 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotCoprocessorSigner(address) | 0x26cd75dc | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotCoprocessorTxSender(address) | 0x52d725f5 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotCustodianSigner(address) | 0x391672a7 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotCustodianTxSender(address) | 0xf924a0cf | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotGatewayOwner(address) | 0x0e56cf3d | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotInitializing() | 0xd7e6bcf8 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotInitializingFromEmptyProxy() | 0x6f4f731f | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotKmsSigner(address) | 0x2a7c6ef6 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotKmsTxSender(address) | 0xaee86323 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | UUPSUnauthorizedCallContext() | 0xe07c8dba | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | UUPSUnsupportedProxiableUUID(bytes32) | 0xaa1d49a4 | +ā•°----------+-----------------------------------------------------------+--------------------------------------------------------------------╯ EmptyUUPSProxy @@ -859,157 +841,149 @@ CiphertextCommitsV2Example DecryptionV2Example -ā•­----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------ā•® -| Type | Signature | Selector | -+===============================================================================================================================================================================================================+ -| Function | UPGRADE_INTERFACE_VERSION() | 0xad3cb1cc | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | delegatedUserDecryptionRequest((bytes32,address)[],(uint256,uint256),(address,address),(uint256,address[]),bytes,bytes,bytes) | 0x9fad5a2f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | eip712Domain() | 0x84b0196e | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getDecryptionConsensusTxSenders(uint256) | 0x0900cc69 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getVersion() | 0x0d8e6e2c | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | initializeFromEmptyProxy() | 0x39f73810 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isDecryptionDone(uint256) | 0x58f5b8ab | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isDelegatedUserDecryptionReady(uint256,(address,address),(bytes32,address)[],address[],bytes) | 0xb6e9a9b3 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isPublicDecryptionReady(bytes32[],bytes) | 0x4014c4cd | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isUserDecryptionReady(address,(bytes32,address)[],bytes) | 0xfbb83259 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | pause() | 0x8456cb59 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | paused() | 0x5c975abb | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | proxiableUUID() | 0x52d1902d | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | publicDecryptionRequest(bytes32[],bytes) | 0xd8998f45 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | publicDecryptionResponse(uint256,bytes,bytes,bytes) | 0x6f8913bc | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | unpause() | 0x3f4ba83a | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | upgradeToAndCall(address,bytes) | 0x4f1ef286 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | userDecryptionRequest((bytes32,address)[],(uint256,uint256),(uint256,address[]),address,bytes,bytes,bytes) | 0xf1b57adb | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | userDecryptionResponse(uint256,bytes,bytes,bytes) | 0x046f9eb3 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | EIP712DomainChanged() | 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | Initialized(uint64) | 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | Paused(address) | 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | PublicDecryptionRequest(uint256,(bytes32,uint256,bytes32,address[])[],bytes) | 0x22db480a39bd72556438aadb4a32a3d2a6638b87c03bbec5fef6997e109587ff | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | PublicDecryptionResponse(uint256,bytes,bytes[],bytes) | 0xd7e58a367a0a6c298e76ad5d240004e327aa1423cbe4bd7ff85d4c715ef8d15f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | Unpaused(address) | 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | Upgraded(address) | 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | UserDecryptionRequest(uint256,(bytes32,uint256,bytes32,address[])[],address,bytes,bytes) | 0xf9011bd6ba0da6049c520d70fe5971f17ed7ab795486052544b51019896c596b | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | UserDecryptionResponse(uint256,uint256,bytes,bytes,bytes) | 0x7fcdfb5381917f554a717d0a5470a33f5a49ba6445f05ec43c74c0bc2cc608b2 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | UserDecryptionResponseThresholdReached(uint256) | 0xe89752be0ecdb68b2a6eb5ef1a891039e0e92ae3c8a62274c5881e48eea1ed25 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | AccountNotAllowedToUseCiphertext(bytes32,address) | 0x160a2b4b | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | AccountNotDelegatedForContracts(uint256,(address,address),address[]) | 0x080a113f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | AddressEmptyCode(address) | 0x9996b315 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ContractAddressesMaxLengthExceeded(uint256,uint256) | 0xaf1f0495 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ContractNotInContractAddresses(address,address[]) | 0xa4c30391 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | DecryptionNotRequested(uint256) | 0xd48af942 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | DelegatorAddressInContractAddresses(address,address[]) | 0xc3446ac7 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | DifferentKeyIdsNotAllowed((bytes32,uint256,bytes32,address[]),(bytes32,uint256,bytes32,address[])) | 0xcfae921f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ECDSAInvalidSignature() | 0xf645eedf | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ECDSAInvalidSignatureLength(uint256) | 0xfce698f7 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ECDSAInvalidSignatureS(bytes32) | 0xd78bce0c | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ERC1967InvalidImplementation(address) | 0x4c9c8ce3 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ERC1967NonPayable() | 0xb398979f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | EmptyContractAddresses() | 0x57cfa217 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | EmptyCtHandleContractPairs() | 0xa6a6cb21 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | EmptyCtHandles() | 0x2de75438 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | EnforcedPause() | 0xd93c0665 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ExpectedPause() | 0x8dfc202b | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | FailedCall() | 0xd6bda275 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | HostChainNotRegistered(uint256) | 0xb6679c3b | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | InvalidFHEType(uint8) | 0x641950d7 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | InvalidInitialization() | 0xf92ee8a9 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | InvalidNullDurationDays() | 0xde2859c1 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | InvalidUserSignature(bytes) | 0x2a873d27 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | KmsNodeAlreadySigned(uint256,address) | 0x99ec48d9 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | MaxDecryptionRequestBitSizeExceeded(uint256,uint256) | 0xe7f4895d | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | MaxDurationDaysExceeded(uint256,uint256) | 0x32951863 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotCoprocessorSigner(address) | 0x26cd75dc | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotCoprocessorTxSender(address) | 0x52d725f5 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotCustodianSigner(address) | 0x391672a7 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotCustodianTxSender(address) | 0xf924a0cf | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotGatewayOwner(address) | 0x0e56cf3d | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotInitializing() | 0xd7e6bcf8 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotInitializingFromEmptyProxy() | 0x6f4f731f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotKmsSigner(address) | 0x2a7c6ef6 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotKmsTxSender(address) | 0xaee86323 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotOwnerOrGatewayConfig(address) | 0xe19166ee | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotPauserOrGatewayConfig(address) | 0x388916bb | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | PublicDecryptNotAllowed(bytes32) | 0x4331a85d | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | StartTimestampInFuture(uint256,uint256) | 0xf24c0887 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | UUPSUnauthorizedCallContext() | 0xe07c8dba | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | UUPSUnsupportedProxiableUUID(bytes32) | 0xaa1d49a4 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | UnsupportedFHEType(uint8) | 0xbe7830b1 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | UserAddressInContractAddresses(address,address[]) | 0xdc4d78b1 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | UserDecryptionRequestExpired(uint256,(uint256,uint256)) | 0x30348040 | -ā•°----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------╯ +ā•­----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------ā•® +| Type | Signature | Selector | ++============================================================================================================================================================================================+ +| Function | UPGRADE_INTERFACE_VERSION() | 0xad3cb1cc | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | eip712Domain() | 0x84b0196e | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | getDecryptionConsensusTxSenders(uint256) | 0x0900cc69 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | getVersion() | 0x0d8e6e2c | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | initializeFromEmptyProxy() | 0x39f73810 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | isDecryptionDone(uint256) | 0x58f5b8ab | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | isPublicDecryptionReady(bytes32[],bytes) | 0x4014c4cd | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | isUserDecryptionReady(address,(bytes32,address)[],bytes) | 0xfbb83259 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | pause() | 0x8456cb59 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | paused() | 0x5c975abb | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | proxiableUUID() | 0x52d1902d | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | publicDecryptionRequest(bytes32[],bytes) | 0xd8998f45 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | publicDecryptionResponse(uint256,bytes,bytes,bytes) | 0x6f8913bc | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | unpause() | 0x3f4ba83a | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | upgradeToAndCall(address,bytes) | 0x4f1ef286 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | userDecryptionRequest((bytes32,address)[],(uint256,uint256),(uint256,address[]),address,bytes,bytes,bytes) | 0xf1b57adb | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | userDecryptionResponse(uint256,bytes,bytes,bytes) | 0x046f9eb3 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | EIP712DomainChanged() | 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | Initialized(uint64) | 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | Paused(address) | 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | PublicDecryptionRequest(uint256,(bytes32,uint256,bytes32,address[])[],bytes) | 0x22db480a39bd72556438aadb4a32a3d2a6638b87c03bbec5fef6997e109587ff | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | PublicDecryptionResponse(uint256,bytes,bytes[],bytes) | 0xd7e58a367a0a6c298e76ad5d240004e327aa1423cbe4bd7ff85d4c715ef8d15f | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | Unpaused(address) | 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | Upgraded(address) | 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | UserDecryptionRequest(uint256,(bytes32,uint256,bytes32,address[])[],address,bytes,bytes) | 0xf9011bd6ba0da6049c520d70fe5971f17ed7ab795486052544b51019896c596b | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | UserDecryptionResponse(uint256,uint256,bytes,bytes,bytes) | 0x7fcdfb5381917f554a717d0a5470a33f5a49ba6445f05ec43c74c0bc2cc608b2 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | UserDecryptionResponseThresholdReached(uint256) | 0xe89752be0ecdb68b2a6eb5ef1a891039e0e92ae3c8a62274c5881e48eea1ed25 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | AccountNotAllowedToUseCiphertext(bytes32,address) | 0x160a2b4b | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | AddressEmptyCode(address) | 0x9996b315 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ContractAddressesMaxLengthExceeded(uint256,uint256) | 0xaf1f0495 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ContractNotInContractAddresses(address,address[]) | 0xa4c30391 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | DecryptionNotRequested(uint256) | 0xd48af942 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | DifferentKeyIdsNotAllowed((bytes32,uint256,bytes32,address[]),(bytes32,uint256,bytes32,address[])) | 0xcfae921f | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ECDSAInvalidSignature() | 0xf645eedf | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ECDSAInvalidSignatureLength(uint256) | 0xfce698f7 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ECDSAInvalidSignatureS(bytes32) | 0xd78bce0c | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ERC1967InvalidImplementation(address) | 0x4c9c8ce3 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ERC1967NonPayable() | 0xb398979f | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | EmptyContractAddresses() | 0x57cfa217 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | EmptyCtHandleContractPairs() | 0xa6a6cb21 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | EmptyCtHandles() | 0x2de75438 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | EnforcedPause() | 0xd93c0665 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ExpectedPause() | 0x8dfc202b | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | FailedCall() | 0xd6bda275 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | HostChainNotRegistered(uint256) | 0xb6679c3b | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | InvalidFHEType(uint8) | 0x641950d7 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | InvalidInitialization() | 0xf92ee8a9 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | InvalidNullDurationDays() | 0xde2859c1 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | InvalidUserSignature(bytes) | 0x2a873d27 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | KmsNodeAlreadySigned(uint256,address) | 0x99ec48d9 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | MaxDecryptionRequestBitSizeExceeded(uint256,uint256) | 0xe7f4895d | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | MaxDurationDaysExceeded(uint256,uint256) | 0x32951863 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotCoprocessorSigner(address) | 0x26cd75dc | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotCoprocessorTxSender(address) | 0x52d725f5 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotCustodianSigner(address) | 0x391672a7 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotCustodianTxSender(address) | 0xf924a0cf | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotGatewayOwner(address) | 0x0e56cf3d | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotInitializing() | 0xd7e6bcf8 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotInitializingFromEmptyProxy() | 0x6f4f731f | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotKmsSigner(address) | 0x2a7c6ef6 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotKmsTxSender(address) | 0xaee86323 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotOwnerOrGatewayConfig(address) | 0xe19166ee | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotPauserOrGatewayConfig(address) | 0x388916bb | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | PublicDecryptNotAllowed(bytes32) | 0x4331a85d | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | StartTimestampInFuture(uint256,uint256) | 0xf24c0887 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | UUPSUnauthorizedCallContext() | 0xe07c8dba | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | UUPSUnsupportedProxiableUUID(bytes32) | 0xaa1d49a4 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | UnsupportedFHEType(uint8) | 0xbe7830b1 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | UserAddressInContractAddresses(address,address[]) | 0xdc4d78b1 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | UserDecryptionRequestExpired(uint256,(uint256,uint256)) | 0x30348040 | +ā•°----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------╯ GatewayConfigV2Example @@ -1397,91 +1371,81 @@ KMSGenerationV2Example MultichainACLV2Example -ā•­----------+---------------------------------------------------------------------------+--------------------------------------------------------------------ā•® -| Type | Signature | Selector | -+===========================================================================================================================================================+ -| Function | UPGRADE_INTERFACE_VERSION() | 0xad3cb1cc | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | allowAccount(bytes32,address,bytes) | 0x294a8705 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | allowPublicDecrypt(bytes32,bytes) | 0xd90724b5 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | delegateAccount(uint256,(address,address),address[]) | 0xf4c5f493 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getAllowAccountConsensusTxSenders(bytes32,address) | 0xae953186 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getAllowPublicDecryptConsensusTxSenders(bytes32) | 0x97c49a40 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getDelegateAccountConsensusTxSenders(uint256,(address,address),address[]) | 0xad8b0b2b | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getVersion() | 0x0d8e6e2c | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | initializeFromEmptyProxy() | 0x39f73810 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isAccountAllowed(bytes32,address) | 0xc6528f69 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isAccountDelegated(uint256,(address,address),address[]) | 0x2b13591c | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isPublicDecryptAllowed(bytes32) | 0x0620326d | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | proxiableUUID() | 0x52d1902d | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | upgradeToAndCall(address,bytes) | 0x4f1ef286 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | AllowAccount(bytes32,address) | 0x18f825f318ffa4ed5bf3f6ed24fd54d33378b0e9f16ddb37c3419691b2e16566 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | AllowPublicDecrypt(bytes32) | 0x0868eca75126ba0a46bbec5eefa883e20a13e6c7d936c9bf47ed886e2eb43d3a | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | DelegateAccount(uint256,(address,address),address[]) | 0x06c13155cfa90343cb4fba180ce8d383b4f56a5bc7aac0e5d8f194b64672a51e | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | Initialized(uint64) | 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | Upgraded(address) | 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | AddressEmptyCode(address) | 0x9996b315 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ContractsMaxLengthExceeded(uint256,uint256) | 0xa7db2751 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | CoprocessorAlreadyAllowedAccount(bytes32,address,address) | 0x6637e32d | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | CoprocessorAlreadyAllowedPublicDecrypt(bytes32,address) | 0xa6f04d26 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | CoprocessorAlreadyDelegated(uint256,(address,address),address[],address) | 0x0cc695ad | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ERC1967InvalidImplementation(address) | 0x4c9c8ce3 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ERC1967NonPayable() | 0xb398979f | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | EmptyContractAddresses() | 0x57cfa217 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | FailedCall() | 0xd6bda275 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | HostChainNotRegistered(uint256) | 0xb6679c3b | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | InvalidInitialization() | 0xf92ee8a9 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotCoprocessorSigner(address) | 0x26cd75dc | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotCoprocessorTxSender(address) | 0x52d725f5 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotCustodianSigner(address) | 0x391672a7 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotCustodianTxSender(address) | 0xf924a0cf | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotGatewayOwner(address) | 0x0e56cf3d | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotInitializing() | 0xd7e6bcf8 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotInitializingFromEmptyProxy() | 0x6f4f731f | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotKmsSigner(address) | 0x2a7c6ef6 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | NotKmsTxSender(address) | 0xaee86323 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | UUPSUnauthorizedCallContext() | 0xe07c8dba | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | UUPSUnsupportedProxiableUUID(bytes32) | 0xaa1d49a4 | -ā•°----------+---------------------------------------------------------------------------+--------------------------------------------------------------------╯ +ā•­----------+-----------------------------------------------------------+--------------------------------------------------------------------ā•® +| Type | Signature | Selector | ++===========================================================================================================================================+ +| Function | UPGRADE_INTERFACE_VERSION() | 0xad3cb1cc | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | allowAccount(bytes32,address,bytes) | 0x294a8705 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | allowPublicDecrypt(bytes32,bytes) | 0xd90724b5 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | getAllowAccountConsensusTxSenders(bytes32,address) | 0xae953186 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | getAllowPublicDecryptConsensusTxSenders(bytes32) | 0x97c49a40 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | getVersion() | 0x0d8e6e2c | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | initializeFromEmptyProxy() | 0x39f73810 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | isAccountAllowed(bytes32,address) | 0xc6528f69 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | isPublicDecryptAllowed(bytes32) | 0x0620326d | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | proxiableUUID() | 0x52d1902d | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | upgradeToAndCall(address,bytes) | 0x4f1ef286 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Event | AllowAccount(bytes32,address) | 0x18f825f318ffa4ed5bf3f6ed24fd54d33378b0e9f16ddb37c3419691b2e16566 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Event | AllowPublicDecrypt(bytes32) | 0x0868eca75126ba0a46bbec5eefa883e20a13e6c7d936c9bf47ed886e2eb43d3a | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Event | Initialized(uint64) | 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Event | Upgraded(address) | 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | AddressEmptyCode(address) | 0x9996b315 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | ContractsMaxLengthExceeded(uint256,uint256) | 0xa7db2751 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | CoprocessorAlreadyAllowedAccount(bytes32,address,address) | 0x6637e32d | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | CoprocessorAlreadyAllowedPublicDecrypt(bytes32,address) | 0xa6f04d26 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | ERC1967InvalidImplementation(address) | 0x4c9c8ce3 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | ERC1967NonPayable() | 0xb398979f | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | EmptyContractAddresses() | 0x57cfa217 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | FailedCall() | 0xd6bda275 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | HostChainNotRegistered(uint256) | 0xb6679c3b | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | InvalidInitialization() | 0xf92ee8a9 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotCoprocessorSigner(address) | 0x26cd75dc | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotCoprocessorTxSender(address) | 0x52d725f5 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotCustodianSigner(address) | 0x391672a7 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotCustodianTxSender(address) | 0xf924a0cf | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotGatewayOwner(address) | 0x0e56cf3d | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotInitializing() | 0xd7e6bcf8 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotInitializingFromEmptyProxy() | 0x6f4f731f | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotKmsSigner(address) | 0x2a7c6ef6 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | NotKmsTxSender(address) | 0xaee86323 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | UUPSUnauthorizedCallContext() | 0xe07c8dba | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | UUPSUnsupportedProxiableUUID(bytes32) | 0xaa1d49a4 | +ā•°----------+-----------------------------------------------------------+--------------------------------------------------------------------╯ PauserSet @@ -1542,73 +1506,67 @@ ICiphertextCommits IDecryption -ā•­----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------ā•® -| Type | Signature | Selector | -+===============================================================================================================================================================================================================+ -| Function | delegatedUserDecryptionRequest((bytes32,address)[],(uint256,uint256),(address,address),(uint256,address[]),bytes,bytes,bytes) | 0x9fad5a2f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getDecryptionConsensusTxSenders(uint256) | 0x0900cc69 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getVersion() | 0x0d8e6e2c | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isDecryptionDone(uint256) | 0x58f5b8ab | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isDelegatedUserDecryptionReady(uint256,(address,address),(bytes32,address)[],address[],bytes) | 0xb6e9a9b3 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isPublicDecryptionReady(bytes32[],bytes) | 0x4014c4cd | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isUserDecryptionReady(address,(bytes32,address)[],bytes) | 0xfbb83259 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | publicDecryptionRequest(bytes32[],bytes) | 0xd8998f45 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | publicDecryptionResponse(uint256,bytes,bytes,bytes) | 0x6f8913bc | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | userDecryptionRequest((bytes32,address)[],(uint256,uint256),(uint256,address[]),address,bytes,bytes,bytes) | 0xf1b57adb | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | userDecryptionResponse(uint256,bytes,bytes,bytes) | 0x046f9eb3 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | PublicDecryptionRequest(uint256,(bytes32,uint256,bytes32,address[])[],bytes) | 0x22db480a39bd72556438aadb4a32a3d2a6638b87c03bbec5fef6997e109587ff | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | PublicDecryptionResponse(uint256,bytes,bytes[],bytes) | 0xd7e58a367a0a6c298e76ad5d240004e327aa1423cbe4bd7ff85d4c715ef8d15f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | UserDecryptionRequest(uint256,(bytes32,uint256,bytes32,address[])[],address,bytes,bytes) | 0xf9011bd6ba0da6049c520d70fe5971f17ed7ab795486052544b51019896c596b | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | UserDecryptionResponse(uint256,uint256,bytes,bytes,bytes) | 0x7fcdfb5381917f554a717d0a5470a33f5a49ba6445f05ec43c74c0bc2cc608b2 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | UserDecryptionResponseThresholdReached(uint256) | 0xe89752be0ecdb68b2a6eb5ef1a891039e0e92ae3c8a62274c5881e48eea1ed25 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ContractAddressesMaxLengthExceeded(uint256,uint256) | 0xaf1f0495 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ContractNotInContractAddresses(address,address[]) | 0xa4c30391 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | DecryptionNotRequested(uint256) | 0xd48af942 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | DelegatorAddressInContractAddresses(address,address[]) | 0xc3446ac7 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | DifferentKeyIdsNotAllowed((bytes32,uint256,bytes32,address[]),(bytes32,uint256,bytes32,address[])) | 0xcfae921f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | EmptyContractAddresses() | 0x57cfa217 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | EmptyCtHandleContractPairs() | 0xa6a6cb21 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | EmptyCtHandles() | 0x2de75438 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | InvalidNullDurationDays() | 0xde2859c1 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | InvalidUserSignature(bytes) | 0x2a873d27 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | KmsNodeAlreadySigned(uint256,address) | 0x99ec48d9 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | MaxDecryptionRequestBitSizeExceeded(uint256,uint256) | 0xe7f4895d | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | MaxDurationDaysExceeded(uint256,uint256) | 0x32951863 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | StartTimestampInFuture(uint256,uint256) | 0xf24c0887 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | UserAddressInContractAddresses(address,address[]) | 0xdc4d78b1 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | UserDecryptionRequestExpired(uint256,(uint256,uint256)) | 0x30348040 | -ā•°----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------╯ +ā•­----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------ā•® +| Type | Signature | Selector | ++============================================================================================================================================================================================+ +| Function | getDecryptionConsensusTxSenders(uint256) | 0x0900cc69 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | getVersion() | 0x0d8e6e2c | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | isDecryptionDone(uint256) | 0x58f5b8ab | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | isPublicDecryptionReady(bytes32[],bytes) | 0x4014c4cd | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | isUserDecryptionReady(address,(bytes32,address)[],bytes) | 0xfbb83259 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | publicDecryptionRequest(bytes32[],bytes) | 0xd8998f45 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | publicDecryptionResponse(uint256,bytes,bytes,bytes) | 0x6f8913bc | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | userDecryptionRequest((bytes32,address)[],(uint256,uint256),(uint256,address[]),address,bytes,bytes,bytes) | 0xf1b57adb | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | userDecryptionResponse(uint256,bytes,bytes,bytes) | 0x046f9eb3 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | PublicDecryptionRequest(uint256,(bytes32,uint256,bytes32,address[])[],bytes) | 0x22db480a39bd72556438aadb4a32a3d2a6638b87c03bbec5fef6997e109587ff | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | PublicDecryptionResponse(uint256,bytes,bytes[],bytes) | 0xd7e58a367a0a6c298e76ad5d240004e327aa1423cbe4bd7ff85d4c715ef8d15f | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | UserDecryptionRequest(uint256,(bytes32,uint256,bytes32,address[])[],address,bytes,bytes) | 0xf9011bd6ba0da6049c520d70fe5971f17ed7ab795486052544b51019896c596b | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | UserDecryptionResponse(uint256,uint256,bytes,bytes,bytes) | 0x7fcdfb5381917f554a717d0a5470a33f5a49ba6445f05ec43c74c0bc2cc608b2 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | UserDecryptionResponseThresholdReached(uint256) | 0xe89752be0ecdb68b2a6eb5ef1a891039e0e92ae3c8a62274c5881e48eea1ed25 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ContractAddressesMaxLengthExceeded(uint256,uint256) | 0xaf1f0495 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | ContractNotInContractAddresses(address,address[]) | 0xa4c30391 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | DecryptionNotRequested(uint256) | 0xd48af942 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | DifferentKeyIdsNotAllowed((bytes32,uint256,bytes32,address[]),(bytes32,uint256,bytes32,address[])) | 0xcfae921f | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | EmptyContractAddresses() | 0x57cfa217 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | EmptyCtHandleContractPairs() | 0xa6a6cb21 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | EmptyCtHandles() | 0x2de75438 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | InvalidNullDurationDays() | 0xde2859c1 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | InvalidUserSignature(bytes) | 0x2a873d27 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | KmsNodeAlreadySigned(uint256,address) | 0x99ec48d9 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | MaxDecryptionRequestBitSizeExceeded(uint256,uint256) | 0xe7f4895d | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | MaxDurationDaysExceeded(uint256,uint256) | 0x32951863 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | StartTimestampInFuture(uint256,uint256) | 0xf24c0887 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | UserAddressInContractAddresses(address,address[]) | 0xdc4d78b1 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Error | UserDecryptionRequestExpired(uint256,(uint256,uint256)) | 0x30348040 | +ā•°----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------╯ IGatewayConfig @@ -1818,45 +1776,35 @@ IKMSGeneration IMultichainACL -ā•­----------+---------------------------------------------------------------------------+--------------------------------------------------------------------ā•® -| Type | Signature | Selector | -+===========================================================================================================================================================+ -| Function | allowAccount(bytes32,address,bytes) | 0x294a8705 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | allowPublicDecrypt(bytes32,bytes) | 0xd90724b5 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | delegateAccount(uint256,(address,address),address[]) | 0xf4c5f493 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getAllowAccountConsensusTxSenders(bytes32,address) | 0xae953186 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getAllowPublicDecryptConsensusTxSenders(bytes32) | 0x97c49a40 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getDelegateAccountConsensusTxSenders(uint256,(address,address),address[]) | 0xad8b0b2b | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | getVersion() | 0x0d8e6e2c | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isAccountAllowed(bytes32,address) | 0xc6528f69 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isAccountDelegated(uint256,(address,address),address[]) | 0x2b13591c | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | isPublicDecryptAllowed(bytes32) | 0x0620326d | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | AllowAccount(bytes32,address) | 0x18f825f318ffa4ed5bf3f6ed24fd54d33378b0e9f16ddb37c3419691b2e16566 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | AllowPublicDecrypt(bytes32) | 0x0868eca75126ba0a46bbec5eefa883e20a13e6c7d936c9bf47ed886e2eb43d3a | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | DelegateAccount(uint256,(address,address),address[]) | 0x06c13155cfa90343cb4fba180ce8d383b4f56a5bc7aac0e5d8f194b64672a51e | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | ContractsMaxLengthExceeded(uint256,uint256) | 0xa7db2751 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | CoprocessorAlreadyAllowedAccount(bytes32,address,address) | 0x6637e32d | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | CoprocessorAlreadyAllowedPublicDecrypt(bytes32,address) | 0xa6f04d26 | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | CoprocessorAlreadyDelegated(uint256,(address,address),address[],address) | 0x0cc695ad | -|----------+---------------------------------------------------------------------------+--------------------------------------------------------------------| -| Error | EmptyContractAddresses() | 0x57cfa217 | -ā•°----------+---------------------------------------------------------------------------+--------------------------------------------------------------------╯ +ā•­----------+-----------------------------------------------------------+--------------------------------------------------------------------ā•® +| Type | Signature | Selector | ++===========================================================================================================================================+ +| Function | allowAccount(bytes32,address,bytes) | 0x294a8705 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | allowPublicDecrypt(bytes32,bytes) | 0xd90724b5 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | getAllowAccountConsensusTxSenders(bytes32,address) | 0xae953186 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | getAllowPublicDecryptConsensusTxSenders(bytes32) | 0x97c49a40 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | getVersion() | 0x0d8e6e2c | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | isAccountAllowed(bytes32,address) | 0xc6528f69 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Function | isPublicDecryptAllowed(bytes32) | 0x0620326d | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Event | AllowAccount(bytes32,address) | 0x18f825f318ffa4ed5bf3f6ed24fd54d33378b0e9f16ddb37c3419691b2e16566 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Event | AllowPublicDecrypt(bytes32) | 0x0868eca75126ba0a46bbec5eefa883e20a13e6c7d936c9bf47ed886e2eb43d3a | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | ContractsMaxLengthExceeded(uint256,uint256) | 0xa7db2751 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | CoprocessorAlreadyAllowedAccount(bytes32,address,address) | 0x6637e32d | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | CoprocessorAlreadyAllowedPublicDecrypt(bytes32,address) | 0xa6f04d26 | +|----------+-----------------------------------------------------------+--------------------------------------------------------------------| +| Error | EmptyContractAddresses() | 0x57cfa217 | +ā•°----------+-----------------------------------------------------------+--------------------------------------------------------------------╯ IPauserSet @@ -1917,29 +1865,27 @@ CiphertextCommitsMock DecryptionMock -ā•­----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------ā•® -| Type | Signature | Selector | -+===============================================================================================================================================================================================================+ -| Function | delegatedUserDecryptionRequest((bytes32,address)[],(uint256,uint256),(address,address),(uint256,address[]),bytes,bytes,bytes) | 0x9fad5a2f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | publicDecryptionRequest(bytes32[],bytes) | 0xd8998f45 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | publicDecryptionResponse(uint256,bytes,bytes,bytes) | 0x6f8913bc | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | userDecryptionRequest((bytes32,address)[],(uint256,uint256),(uint256,address[]),address,bytes,bytes,bytes) | 0xf1b57adb | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Function | userDecryptionResponse(uint256,bytes,bytes,bytes) | 0x046f9eb3 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | PublicDecryptionRequest(uint256,(bytes32,uint256,bytes32,address[])[],bytes) | 0x22db480a39bd72556438aadb4a32a3d2a6638b87c03bbec5fef6997e109587ff | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | PublicDecryptionResponse(uint256,bytes,bytes[],bytes) | 0xd7e58a367a0a6c298e76ad5d240004e327aa1423cbe4bd7ff85d4c715ef8d15f | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | UserDecryptionRequest(uint256,(bytes32,uint256,bytes32,address[])[],address,bytes,bytes) | 0xf9011bd6ba0da6049c520d70fe5971f17ed7ab795486052544b51019896c596b | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | UserDecryptionResponse(uint256,uint256,bytes,bytes,bytes) | 0x7fcdfb5381917f554a717d0a5470a33f5a49ba6445f05ec43c74c0bc2cc608b2 | -|----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| -| Event | UserDecryptionResponseThresholdReached(uint256) | 0xe89752be0ecdb68b2a6eb5ef1a891039e0e92ae3c8a62274c5881e48eea1ed25 | -ā•°----------+-------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------╯ +ā•­----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------ā•® +| Type | Signature | Selector | ++============================================================================================================================================================================================+ +| Function | publicDecryptionRequest(bytes32[],bytes) | 0xd8998f45 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | publicDecryptionResponse(uint256,bytes,bytes,bytes) | 0x6f8913bc | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | userDecryptionRequest((bytes32,address)[],(uint256,uint256),(uint256,address[]),address,bytes,bytes,bytes) | 0xf1b57adb | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Function | userDecryptionResponse(uint256,bytes,bytes,bytes) | 0x046f9eb3 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | PublicDecryptionRequest(uint256,(bytes32,uint256,bytes32,address[])[],bytes) | 0x22db480a39bd72556438aadb4a32a3d2a6638b87c03bbec5fef6997e109587ff | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | PublicDecryptionResponse(uint256,bytes,bytes[],bytes) | 0xd7e58a367a0a6c298e76ad5d240004e327aa1423cbe4bd7ff85d4c715ef8d15f | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | UserDecryptionRequest(uint256,(bytes32,uint256,bytes32,address[])[],address,bytes,bytes) | 0xf9011bd6ba0da6049c520d70fe5971f17ed7ab795486052544b51019896c596b | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | UserDecryptionResponse(uint256,uint256,bytes,bytes,bytes) | 0x7fcdfb5381917f554a717d0a5470a33f5a49ba6445f05ec43c74c0bc2cc608b2 | +|----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------| +| Event | UserDecryptionResponseThresholdReached(uint256) | 0xe89752be0ecdb68b2a6eb5ef1a891039e0e92ae3c8a62274c5881e48eea1ed25 | +ā•°----------+------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------╯ GatewayConfigMock @@ -2029,21 +1975,17 @@ KMSGenerationMock MultichainACLMock -ā•­----------+------------------------------------------------------+--------------------------------------------------------------------ā•® -| Type | Signature | Selector | -+======================================================================================================================================+ -| Function | allowAccount(bytes32,address,bytes) | 0x294a8705 | -|----------+------------------------------------------------------+--------------------------------------------------------------------| -| Function | allowPublicDecrypt(bytes32,bytes) | 0xd90724b5 | -|----------+------------------------------------------------------+--------------------------------------------------------------------| -| Function | delegateAccount(uint256,(address,address),address[]) | 0xf4c5f493 | -|----------+------------------------------------------------------+--------------------------------------------------------------------| -| Event | AllowAccount(bytes32,address) | 0x18f825f318ffa4ed5bf3f6ed24fd54d33378b0e9f16ddb37c3419691b2e16566 | -|----------+------------------------------------------------------+--------------------------------------------------------------------| -| Event | AllowPublicDecrypt(bytes32) | 0x0868eca75126ba0a46bbec5eefa883e20a13e6c7d936c9bf47ed886e2eb43d3a | -|----------+------------------------------------------------------+--------------------------------------------------------------------| -| Event | DelegateAccount(uint256,(address,address),address[]) | 0x06c13155cfa90343cb4fba180ce8d383b4f56a5bc7aac0e5d8f194b64672a51e | -ā•°----------+------------------------------------------------------+--------------------------------------------------------------------╯ +ā•­----------+-------------------------------------+--------------------------------------------------------------------ā•® +| Type | Signature | Selector | ++=====================================================================================================================+ +| Function | allowAccount(bytes32,address,bytes) | 0x294a8705 | +|----------+-------------------------------------+--------------------------------------------------------------------| +| Function | allowPublicDecrypt(bytes32,bytes) | 0xd90724b5 | +|----------+-------------------------------------+--------------------------------------------------------------------| +| Event | AllowAccount(bytes32,address) | 0x18f825f318ffa4ed5bf3f6ed24fd54d33378b0e9f16ddb37c3419691b2e16566 | +|----------+-------------------------------------+--------------------------------------------------------------------| +| Event | AllowPublicDecrypt(bytes32) | 0x0868eca75126ba0a46bbec5eefa883e20a13e6c7d936c9bf47ed886e2eb43d3a | +ā•°----------+-------------------------------------+--------------------------------------------------------------------╯ GatewayConfigChecks @@ -2078,15 +2020,13 @@ GatewayOwnable MultichainACLChecks -ā•­-------+----------------------------------------------------------------------+------------ā•® -| Type | Signature | Selector | -+===========================================================================================+ -| Error | AccountNotAllowedToUseCiphertext(bytes32,address) | 0x160a2b4b | -|-------+----------------------------------------------------------------------+------------| -| Error | AccountNotDelegatedForContracts(uint256,(address,address),address[]) | 0x080a113f | -|-------+----------------------------------------------------------------------+------------| -| Error | PublicDecryptNotAllowed(bytes32) | 0x4331a85d | -ā•°-------+----------------------------------------------------------------------+------------╯ +ā•­-------+---------------------------------------------------+------------ā•® +| Type | Signature | Selector | ++========================================================================+ +| Error | AccountNotAllowedToUseCiphertext(bytes32,address) | 0x160a2b4b | +|-------+---------------------------------------------------+------------| +| Error | PublicDecryptNotAllowed(bytes32) | 0x4331a85d | +ā•°-------+---------------------------------------------------+------------╯ Pausable diff --git a/gateway-contracts/test/Decryption.ts b/gateway-contracts/test/Decryption.ts index 44290d699..0931451a0 100644 --- a/gateway-contracts/test/Decryption.ts +++ b/gateway-contracts/test/Decryption.ts @@ -1464,784 +1464,6 @@ describe("Decryption", function () { }); }); - describe("Delegated User Decryption", function () { - let delegatedSignature: string; - let eip712RequestMessage: EIP712; - let userDecryptedShares: string[]; - - // Expected decryption request ID (after a first request) for a delegated user decryption request - // (same as a user decryption request) - // The IDs won't increase between requests made in different "describe" sections as the blockchain - // state is cleaned each time `loadFixture` is called - const decryptionId = getUserDecryptId(1); - - // Create valid input values - // The delegated account needs a wallet in order to sign - const delegatorAddress = createRandomAddress(); - const delegatedAccount = createRandomWallet(); - const delegatedAddress = delegatedAccount.address; - const delegationAccounts: DelegationAccountsStruct = { - delegatorAddress, - delegatedAddress, - }; - const contractAddress = createRandomAddress(); - const publicKey = createBytes32(); - const startTimestamp = getDateInSeconds(); - const durationDays = 120; - const contractsInfo: IDecryption.ContractsInfoStruct = { - addresses: [contractAddress], - chainId: hostChainId, - }; - - const requestValidity: IDecryption.RequestValidityStruct = { - startTimestamp, - durationDays, - }; - - // Define the ctHandleContractPairs (the handles have been added and allowed by default) - const ctHandleContractPairs: CtHandleContractPairStruct[] = ctHandles.map((ctHandle) => ({ - contractAddress, - ctHandle, - })); - - // Define new valid inputs (the handles have neither been added nor allowed by default) - const newCtHandleContractPair: CtHandleContractPairStruct = { - contractAddress, - ctHandle: newCtHandles[0], - }; - - // Define fake values - const fakeDelegatorAddress = createRandomAddress(); - const fakeContractAddresses = createRandomAddresses(3); - const fakeContractAddress = fakeContractAddresses[0]; - const fakeContractAddressCtHandleContractPairs: CtHandleContractPairStruct[] = [ - { - contractAddress: fakeContractAddress, - ctHandle, - }, - ]; - const fakeDelegatorDelegationAccounts: DelegationAccountsStruct = { - delegatorAddress: fakeDelegatorAddress, - delegatedAddress, - }; - - // Define utility values - const tenDaysInSeconds = 10 * 24 * 60 * 60; - - // Allow handles for user decryption - async function prepareDelegatedUserDecryptEIP712Fixture() { - const fixtureData = await loadFixture(prepareAddCiphertextFixture); - const { decryption, MultichainACL, kmsSigners, coprocessorTxSenders } = fixtureData; - - // Allow account - for (const ctHandle of ctHandles) { - for (let i = 0; i < coprocessorTxSenders.length; i++) { - await MultichainACL.connect(coprocessorTxSenders[i]).allowAccount(ctHandle, delegatorAddress, extraDataV0); - await MultichainACL.connect(coprocessorTxSenders[i]).allowAccount(ctHandle, contractAddress, extraDataV0); - } - } - - // Delegate account - for (const txSender of coprocessorTxSenders) { - await MultichainACL.connect(txSender).delegateAccount(hostChainId, delegationAccounts, contractsInfo.addresses); - } - - // Create EIP712 messages - const decryptionAddress = await decryption.getAddress(); - const eip712RequestMessage = createEIP712RequestDelegatedUserDecrypt( - decryptionAddress, - publicKey, - contractsInfo.addresses as string[], - delegatorAddress, - contractsInfo.chainId as number, - requestValidity.startTimestamp.toString(), - requestValidity.durationDays.toString(), - extraDataV0, - ); - - // Sign the message with the delegated account - const [delegatedSignature] = await getSignaturesDelegatedUserDecryptRequest(eip712RequestMessage, [ - delegatedAccount, - ]); - - const userDecryptedShares = createBytes32s(kmsSigners.length); - - const eip712ResponseMessages = userDecryptedShares.map((userDecryptedShare) => - createEIP712ResponseUserDecrypt( - gatewayChainId, - decryptionAddress, - publicKey, - ctHandleContractPairs.map((pair) => pair.ctHandle.toString()), - userDecryptedShare, - extraDataV0, - ), - ); - - // Sign the message with all KMS signers - const kmsSignatures = await getSignaturesUserDecryptResponse(eip712ResponseMessages, kmsSigners); - - return { - ...fixtureData, - eip712RequestMessage, - userDecryptedShares, - delegatedSignature, - kmsSignatures, - requestValidity, - }; - } - - beforeEach(async function () { - // Initialize globally used variables before each test - const fixtureData = await loadFixture(prepareDelegatedUserDecryptEIP712Fixture); - kmsGeneration = fixtureData.kmsGeneration; - MultichainACL = fixtureData.MultichainACL; - ciphertextCommits = fixtureData.ciphertextCommits; - decryption = fixtureData.decryption; - owner = fixtureData.owner; - pauser = fixtureData.pauser; - snsCiphertextMaterials = fixtureData.snsCiphertextMaterials; - delegatedSignature = fixtureData.delegatedSignature; - kmsSignatures = fixtureData.kmsSignatures; - kmsTxSenders = fixtureData.kmsTxSenders; - coprocessorTxSenders = fixtureData.coprocessorTxSenders; - eip712RequestMessage = fixtureData.eip712RequestMessage; - userDecryptedShares = fixtureData.userDecryptedShares; - }); - - it("Should request a user decryption with multiple ctHandleContractPairs", async function () { - // Request user decryption - const requestTx = await decryption.delegatedUserDecryptionRequest( - ctHandleContractPairs, - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ); - - // Check request event - await expect(requestTx) - .to.emit(decryption, "UserDecryptionRequest") - .withArgs( - decryptionId, - toValues(snsCiphertextMaterials), - delegationAccounts.delegatedAddress, - publicKey, - extraDataV0, - ); - }); - - it("Should request a user decryption with a single ctHandleContractPair", async function () { - const singleCtHandleContractPairs = ctHandleContractPairs.slice(0, 1); - const singleSnsCiphertextMaterials = snsCiphertextMaterials.slice(0, 1); - - // Request user decryption - const requestTx = await decryption.delegatedUserDecryptionRequest( - singleCtHandleContractPairs, - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ); - - // Check request event - await expect(requestTx) - .to.emit(decryption, "UserDecryptionRequest") - .withArgs( - decryptionId, - toValues(singleSnsCiphertextMaterials), - delegationAccounts.delegatedAddress, - publicKey, - extraDataV0, - ); - }); - - it("Should revert because ctHandleContractPairs is empty", async function () { - await expect( - decryption.delegatedUserDecryptionRequest( - [], - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ).to.be.revertedWithCustomError(decryption, "EmptyCtHandleContractPairs"); - }); - - it("Should revert because contract addresses is empty", async function () { - const contractsInfo: IDecryption.ContractsInfoStruct = { - addresses: [], - chainId: hostChainId, - }; - - await expect( - decryption.delegatedUserDecryptionRequest( - ctHandleContractPairs, - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ).to.be.revertedWithCustomError(decryption, "EmptyContractAddresses"); - }); - - it("Should revert because contract addresses exceeds maximum length allowed", async function () { - // Create a list of contract addresses exceeding the maximum length allowed - const contractsInfo: IDecryption.ContractsInfoStruct = { - addresses: createRandomAddresses(15), - chainId: hostChainId, - }; - - await expect( - decryption.delegatedUserDecryptionRequest( - ctHandleContractPairs, - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ) - .to.be.revertedWithCustomError(decryption, "ContractAddressesMaxLengthExceeded") - .withArgs(MAX_USER_DECRYPT_CONTRACT_ADDRESSES, contractsInfo.addresses.length); - }); - - it("Should revert because durationDays is null", async function () { - // Create an invalid validity request with a durationDays that is 0 - const invalidRequestValidity: IDecryption.RequestValidityStruct = { - startTimestamp, - durationDays: 0, - }; - - await expect( - decryption.delegatedUserDecryptionRequest( - ctHandleContractPairs, - invalidRequestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ) - .to.be.revertedWithCustomError(decryption, "InvalidNullDurationDays") - .withArgs(); - }); - - it("Should revert because durationDays exceeds maximum allowed", async function () { - // Create an invalid validity request with a durationDays that exceeds the maximum allowed - const largeDurationDays = MAX_USER_DECRYPT_DURATION_DAYS + 1; - const invalidRequestValidity: IDecryption.RequestValidityStruct = { - startTimestamp, - durationDays: largeDurationDays, - }; - - await expect( - decryption.delegatedUserDecryptionRequest( - ctHandleContractPairs, - invalidRequestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ) - .to.be.revertedWithCustomError(decryption, "MaxDurationDaysExceeded") - .withArgs(MAX_USER_DECRYPT_DURATION_DAYS, largeDurationDays); - }); - - it("Should revert because the start timestamp is in the future", async function () { - // Create an invalid validity request with a start timestamp in the future by delaying it by 10 days - const futureRequestValidity: IDecryption.RequestValidityStruct = { - startTimestamp: startTimestamp + tenDaysInSeconds, - durationDays, - }; - - // We do not check the actual values in the error message as the block.timestamp will change - // between the request and the error emission - await expect( - decryption.delegatedUserDecryptionRequest( - ctHandleContractPairs, - futureRequestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ).to.be.revertedWithCustomError(decryption, "StartTimestampInFuture"); - }); - - it("Should revert because the delegated user decryption request has expired", async function () { - // Create a expired validity request. - // Note that we currently allow a past start timestamp. Here, we set it 10 days in the past, - // but we allow the request for 1 day only - const expiredRequestValidity: IDecryption.RequestValidityStruct = { - startTimestamp: startTimestamp - tenDaysInSeconds, - durationDays: 1, - }; - - // We do not check the actual values in the error message as the block.timestamp will change - // between the request and the error emission - await expect( - decryption.delegatedUserDecryptionRequest( - ctHandleContractPairs, - expiredRequestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ).to.be.revertedWithCustomError(decryption, "UserDecryptionRequestExpired"); - }); - - it("Should revert because handle represents an invalid FHE type", async function () { - // Create an input containing a single handle with an invalid FHE type - const invalidFHETypeCtHandleContractPairs: CtHandleContractPairStruct[] = [ - { - contractAddress, - ctHandle: invalidFHETypeCtHandle, - }, - ]; - - // Check that the request fails because the ctHandle found in the ctHandleContractPairs - // represents an unsupported FHE type - // Note that the user signature is not correct here but the FHE type validity is checked first - await expect( - decryption.delegatedUserDecryptionRequest( - invalidFHETypeCtHandleContractPairs, - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ) - .to.be.revertedWithCustomError(decryption, "InvalidFHEType") - .withArgs(invalidFHEType); - }); - - it("Should revert because handle represents an unsupported FHE type", async function () { - // Create an input containing a single handle with an unsupported FHE type - const unsupportedFHETypeCtHandleContractPairs: CtHandleContractPairStruct[] = [ - { - contractAddress, - ctHandle: unsupportedFHETypeCtHandle, - }, - ]; - - // Check that the request fails because the ctHandle found in the ctHandleContractPairs - // represents an unsupported FHE type - // Note that the user signature is not correct here but the FHE type validity is checked first - await expect( - decryption.delegatedUserDecryptionRequest( - unsupportedFHETypeCtHandleContractPairs, - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ) - .to.be.revertedWithCustomError(decryption, "UnsupportedFHEType") - .withArgs(unsupportedFHEType); - }); - - it("Should revert because total bit size exceeds the maximum allowed", async function () { - // Build a ctHandleContractPair containing the euint256 handle (which has a bit size of 256 bits) - const euint256CtHandleContractPair: CtHandleContractPairStruct = { - contractAddress, - ctHandle: euint256CtHandle, - }; - - // Create a list of 3 euint256 ctHandles (each has a bit size of 256 bits) - const numCtHandles = 12; - const largeByteSizeCtHandleContractPairs = Array(numCtHandles).fill(euint256CtHandleContractPair); - - // Calculate the new total bit size of this list - const totalBitSize = numCtHandles * 256; - - // Check that the request fails because the total bit size exceeds the maximum allowed - // Note that the user signature is not correct here but the FHE type validity is checked first - await expect( - decryption.delegatedUserDecryptionRequest( - largeByteSizeCtHandleContractPairs, - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ) - .to.be.revertedWithCustomError(decryption, "MaxDecryptionRequestBitSizeExceeded") - .withArgs(MAX_DECRYPTION_REQUEST_BITS, totalBitSize); - }); - - it("Should revert because the delegator address is a contract address", async function () { - // Define fake ctHandleContractPairs with delegator address as contract address - const delegatorAddressCtHandleContractPairs: CtHandleContractPairStruct[] = [ - { - contractAddress: delegatorAddress, - ctHandle, - }, - ]; - - const delegatorInContractsInfo: IDecryption.ContractsInfoStruct = { - addresses: [delegatorAddress], - chainId: hostChainId, - }; - - // Check that the request fails because the delegated address is included in the ctHandleContractPairs list - await expect( - decryption.delegatedUserDecryptionRequest( - delegatorAddressCtHandleContractPairs, - requestValidity, - delegationAccounts, - delegatorInContractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ) - .to.be.revertedWithCustomError(decryption, "DelegatorAddressInContractAddresses") - .withArgs(delegatorAddress, delegatorInContractsInfo.addresses); - }); - - it("Should revert because the delegator is not allowed to access a handle", async function () { - await expect( - decryption.delegatedUserDecryptionRequest( - ctHandleContractPairs, - requestValidity, - fakeDelegatorDelegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ) - .to.be.revertedWithCustomError(decryption, "AccountNotAllowedToUseCiphertext") - .withArgs(ctHandles[0], fakeDelegatorAddress); - }); - - it("Should revert because a contract is not allowed for user decryption on a ctHandle", async function () { - await expect( - decryption.delegatedUserDecryptionRequest( - fakeContractAddressCtHandleContractPairs, - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ) - .to.be.revertedWithCustomError(decryption, "AccountNotAllowedToUseCiphertext") - .withArgs(ctHandles[0], fakeContractAddress); - }); - - it("Should revert because ciphertext material has not been added", async function () { - // Allow access to handles for the user and contract accounts - // The associated ciphertext material has not yet been added to the CiphertextStorage state. - for (const newCtHandle of newCtHandles) { - for (const coprocessorTxSender of coprocessorTxSenders) { - await MultichainACL.connect(coprocessorTxSender).allowAccount( - newCtHandle, - delegationAccounts.delegatorAddress, - extraDataV0, - ); - await MultichainACL.connect(coprocessorTxSender).allowAccount(newCtHandle, contractAddress, extraDataV0); - } - } - - // Check that the request fails because the ciphertext material is unavailable - // Note: the function should be reverted on the unavailable ctHandle since it loops over the handles - await expect( - decryption.delegatedUserDecryptionRequest( - [newCtHandleContractPair], - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ) - .to.be.revertedWithCustomError(ciphertextCommits, "CiphertextMaterialNotFound") - .withArgs(newCtHandles[0]); - }); - - it("Should revert because the delegated address has not been delegated for a contract", async function () { - const fakeContractInContractsInfo: IDecryption.ContractsInfoStruct = { - addresses: [...contractsInfo.addresses, fakeContractAddress], - chainId: hostChainId, - }; - await expect( - decryption.delegatedUserDecryptionRequest( - ctHandleContractPairs, - requestValidity, - delegationAccounts, - fakeContractInContractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ) - .to.be.revertedWithCustomError(decryption, "AccountNotDelegatedForContracts") - .withArgs(hostChainId, toValues(delegationAccounts), fakeContractInContractsInfo.addresses); - }); - - it("Should revert because of invalid EIP712 user request signature", async function () { - // Sign the message with a fake signer - const [fakeSignature] = await getSignaturesDelegatedUserDecryptRequest(eip712RequestMessage, [fakeSigner]); - - // Request user decryption - const requestTx = decryption.delegatedUserDecryptionRequest( - ctHandleContractPairs, - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - fakeSignature, - extraDataV0, - ); - - // Check that the request has been reverted because of an invalid EIP712 user request signature - await expect(requestTx).to.be.revertedWithCustomError(decryption, "InvalidUserSignature").withArgs(fakeSignature); - }); - - it("Should revert because contract in ctHandleContractPairs is not included in contractAddresses list", async function () { - const fakeContractsInfo: IDecryption.ContractsInfoStruct = { - addresses: fakeContractAddresses, - chainId: hostChainId, - }; - - // Check that the request fails because the contract address is not included in the contractAddresses list - await expect( - decryption.delegatedUserDecryptionRequest( - ctHandleContractPairs, - requestValidity, - delegationAccounts, - fakeContractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ) - .to.be.revertedWithCustomError(decryption, "ContractNotInContractAddresses") - .withArgs(contractAddress, fakeContractAddresses); - }); - - it("Should revert because of ctMaterials tied to different key IDs", async function () { - // Store the handle with a new key ID and allow the user and contract accounts to use it - for (let i = 0; i < coprocessorTxSenders.length; i++) { - await ciphertextCommits - .connect(coprocessorTxSenders[i]) - .addCiphertextMaterial(newCtHandle, newKeyId, ciphertextDigest, snsCiphertextDigest); - await MultichainACL.connect(coprocessorTxSenders[i]).allowAccount(newCtHandle, delegatorAddress, extraDataV0); - await MultichainACL.connect(coprocessorTxSenders[i]).allowAccount(newCtHandle, contractAddress, extraDataV0); - } - - // Request user decryption with ctMaterials tied to different key IDs - const requestTx = decryption.delegatedUserDecryptionRequest( - [...ctHandleContractPairs, newCtHandleContractPair], - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ); - - // Check that different key IDs are not allowed for batched user decryption - await expect(requestTx) - .to.be.revertedWithCustomError(decryption, "DifferentKeyIdsNotAllowed") - .withArgs( - toValues(snsCiphertextMaterials[0]), - toValues({ - ctHandle: newCtHandle, - keyId: newKeyId, - snsCiphertextDigest, - coprocessorTxSenderAddresses: coprocessorTxSenders.map((s) => s.address), - }), - ); - }); - - it("Should delegate user decrypt with 3 valid responses", async function () { - // Request user decryption - await decryption.delegatedUserDecryptionRequest( - ctHandleContractPairs, - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ); - - // Trigger three valid user decryption responses using different KMS transaction senders - const responseTx1 = await decryption - .connect(kmsTxSenders[0]) - .userDecryptionResponse(decryptionId, userDecryptedShares[0], kmsSignatures[0], extraDataV0); - - const responseTx2 = await decryption - .connect(kmsTxSenders[1]) - .userDecryptionResponse(decryptionId, userDecryptedShares[1], kmsSignatures[1], extraDataV0); - - const responseTx3 = await decryption - .connect(kmsTxSenders[2]) - .userDecryptionResponse(decryptionId, userDecryptedShares[2], kmsSignatures[2], extraDataV0); - - // Check UserDecryptionResponse events are emitted for each response - await expect(responseTx1) - .to.emit(decryption, "UserDecryptionResponse") - .withArgs(decryptionId, 0n, userDecryptedShares[0], kmsSignatures[0], extraDataV0); - await expect(responseTx2) - .to.emit(decryption, "UserDecryptionResponse") - .withArgs(decryptionId, 1n, userDecryptedShares[1], kmsSignatures[1], extraDataV0); - await expect(responseTx3) - .to.emit(decryption, "UserDecryptionResponse") - .withArgs(decryptionId, 2n, userDecryptedShares[2], kmsSignatures[2], extraDataV0); - - // Threshold should be reached at the third response (reconstruction threshold) - // Check 3rd response event: it should emit the threshold reached event - await expect(responseTx3).to.emit(decryption, "UserDecryptionResponseThresholdReached").withArgs(decryptionId); - - // Check that the user decryption is done - expect(await decryption.isDecryptionDone(decryptionId)).to.be.true; - }); - - it("Should delegate user decrypt with 3 valid responses and ignore the other valid one", async function () { - // Request user decryption - await decryption.delegatedUserDecryptionRequest( - ctHandleContractPairs, - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ); - - // Trigger three valid user decryption responses using different KMS transaction senders - const responseTx1 = await decryption - .connect(kmsTxSenders[0]) - .userDecryptionResponse(decryptionId, userDecryptedShares[0], kmsSignatures[0], extraDataV0); - - const responseTx2 = await decryption - .connect(kmsTxSenders[1]) - .userDecryptionResponse(decryptionId, userDecryptedShares[1], kmsSignatures[1], extraDataV0); - - await decryption - .connect(kmsTxSenders[2]) - .userDecryptionResponse(decryptionId, userDecryptedShares[2], kmsSignatures[2], extraDataV0); - - const responseTx4 = await decryption - .connect(kmsTxSenders[3]) - .userDecryptionResponse(decryptionId, userDecryptedShares[3], kmsSignatures[3], extraDataV0); - - // Check that the 1st, 2nd and 4th responses do not emit an event: - // - 1st and 2nd responses are ignored because threshold is not reached yet - // - 4th response is ignored (not reverted) even though they are late - await expect(responseTx1).to.not.emit(decryption, "UserDecryptionResponseThresholdReached"); - await expect(responseTx2).to.not.emit(decryption, "UserDecryptionResponseThresholdReached"); - await expect(responseTx4).to.not.emit(decryption, "UserDecryptionResponseThresholdReached"); - }); - - it("Should revert because the contract is paused", async function () { - // Pause the contract - await decryption.connect(pauser).pause(); - - // Try calling paused delegated user decryption request - await expect( - decryption.delegatedUserDecryptionRequest( - ctHandleContractPairs, - requestValidity, - delegationAccounts, - contractsInfo, - publicKey, - delegatedSignature, - extraDataV0, - ), - ).to.be.revertedWithCustomError(decryption, "EnforcedPause"); - }); - - describe("Checks", function () { - it("Should be true because delegated user decryption is ready", async function () { - expect( - await decryption.isDelegatedUserDecryptionReady( - hostChainId, - delegationAccounts, - ctHandleContractPairs, - contractsInfo.addresses, - extraDataV0, - ), - ).to.be.true; - }); - - it("Should be false because the delegator is not allowed for user decryption on a ctHandle", async function () { - expect( - await decryption.isDelegatedUserDecryptionReady( - hostChainId, - fakeDelegatorDelegationAccounts, - ctHandleContractPairs, - contractsInfo.addresses, - extraDataV0, - ), - ).to.be.false; - }); - - it("Should be false because a contract is not allowed for user decryption on a ctHandle", async function () { - expect( - await decryption.isDelegatedUserDecryptionReady( - hostChainId, - delegationAccounts, - fakeContractAddressCtHandleContractPairs, - contractsInfo.addresses, - extraDataV0, - ), - ).to.be.false; - }); - - it("Should be false because the delegated address has not been delegated for a contract", async function () { - const fakeContractAddresses = [fakeContractAddress]; - expect( - await decryption.isDelegatedUserDecryptionReady( - hostChainId, - delegationAccounts, - ctHandleContractPairs, - fakeContractAddresses, - extraDataV0, - ), - ).to.be.false; - }); - - it("Should be false because ciphertext material has not been added", async function () { - expect( - await decryption.isDelegatedUserDecryptionReady( - hostChainId, - delegationAccounts, - [newCtHandleContractPair], - contractsInfo.addresses, - extraDataV0, - ), - ).to.be.false; - }); - }); - }); - describe("Pause", async function () { beforeEach(async function () { const fixtureData = await loadFixture(loadTestVariablesFixture); diff --git a/gateway-contracts/test/MultichainACL.ts b/gateway-contracts/test/MultichainACL.ts index 2346c3534..141dadf2b 100644 --- a/gateway-contracts/test/MultichainACL.ts +++ b/gateway-contracts/test/MultichainACL.ts @@ -301,232 +301,4 @@ describe("MultichainACL", function () { expect(await MultichainACL.connect(coprocessorTxSenders[0]).isPublicDecryptAllowed(newCtHandle)).to.be.false; }); }); - - describe("Delegate account", async function () { - // Define valid inputs (they will be used for delegation by default) - const delegator = createRandomAddress(); - const delegated = createRandomAddress(); - const delegationAccounts: DelegationAccountsStruct = { - delegatorAddress: delegator, - delegatedAddress: delegated, - }; - const allowedContracts = createRandomAddresses(3); - - // Define new delegation accounts (they will not be used for delegation by default) - const newDelegator = createRandomAddress(); - const newDelegated = createRandomAddress(); - const newDelegationAccounts: DelegationAccountsStruct = { - delegatorAddress: newDelegator, - delegatedAddress: newDelegated, - }; - - beforeEach(async function () { - // Delegate access to the the account and its contracts - for (let i = 0; i < coprocessorTxSenders.length; i++) { - await MultichainACL.connect(coprocessorTxSenders[i]).delegateAccount( - hostChainId, - delegationAccounts, - allowedContracts, - ); - } - }); - - it("Should delegate account with 2 valid responses", async function () { - // Trigger 2 delegate calls with different coprocessor transaction senders - await MultichainACL.connect(coprocessorTxSenders[0]).delegateAccount( - hostChainId, - newDelegationAccounts, - allowedContracts, - ); - const txResponse = MultichainACL.connect(coprocessorTxSenders[1]).delegateAccount( - hostChainId, - newDelegationAccounts, - allowedContracts, - ); - - // Consensus should be reached at the second response - await expect(txResponse) - .to.emit(MultichainACL, "DelegateAccount") - .withArgs(hostChainId, toValues(newDelegationAccounts), allowedContracts); - }); - - it("Should delegate account with 2 valid responses and ignore the other valid one", async function () { - // Trigger 3 delegate account calls with different coprocessor transaction senders - const txResponse1 = await MultichainACL.connect(coprocessorTxSenders[0]).delegateAccount( - hostChainId, - newDelegationAccounts, - allowedContracts, - ); - await MultichainACL.connect(coprocessorTxSenders[1]).delegateAccount( - hostChainId, - newDelegationAccounts, - allowedContracts, - ); - const txResponse3 = await MultichainACL.connect(coprocessorTxSenders[2]).delegateAccount( - hostChainId, - newDelegationAccounts, - allowedContracts, - ); - - // Check that the 1st and 3rd responses do not emit an event: - // - 1st response is ignored because consensus is not reached yet - // - 3rd response is ignored (not reverted) even though it is late - await expect(txResponse1).to.not.emit(MultichainACL, "DelegateAccount"); - await expect(txResponse3).to.not.emit(MultichainACL, "DelegateAccount"); - }); - - it("Should get all valid coprocessor transaction senders from delegate account consensus", async function () { - // Trigger a delegate account calls using the first coprocessor transaction sender - await MultichainACL.connect(coprocessorTxSenders[0]).delegateAccount( - hostChainId, - newDelegationAccounts, - allowedContracts, - ); - - const expectedCoprocessorTxSenders1 = coprocessorTxSenders.slice(0, 1).map((s) => s.address); - - // Get the coprocessor transaction sender that answered first, before the consensus is reached - // Since the consensus is directly made in the "request" call, the list represents the coprocessor - // transaction sender that answered, and is accessible before the consensus is reached - const proofRejectionConsensusTxSenders1 = await MultichainACL.getDelegateAccountConsensusTxSenders( - hostChainId, - newDelegationAccounts, - allowedContracts, - ); - expect(proofRejectionConsensusTxSenders1).to.deep.equal(expectedCoprocessorTxSenders1); - - // Trigger a delegate account calls using the second coprocessor transaction sender - await MultichainACL.connect(coprocessorTxSenders[1]).delegateAccount( - hostChainId, - newDelegationAccounts, - allowedContracts, - ); - - const expectedCoprocessorTxSenders2 = coprocessorTxSenders.slice(0, 2).map((s) => s.address); - - // Check that the coprocessor transaction senders that were involved in the consensus are the - // first 2 coprocessor transaction senders, at the moment the consensus is reached - const proofRejectionConsensusTxSenders2 = await MultichainACL.getDelegateAccountConsensusTxSenders( - hostChainId, - newDelegationAccounts, - allowedContracts, - ); - expect(proofRejectionConsensusTxSenders2).to.deep.equal(expectedCoprocessorTxSenders2); - - // Trigger a delegate account calls using the third coprocessor transaction sender - await MultichainACL.connect(coprocessorTxSenders[2]).delegateAccount( - hostChainId, - newDelegationAccounts, - allowedContracts, - ); - - const expectedCoprocessorTxSenders3 = coprocessorTxSenders.map((s) => s.address); - - // Check that the coprocessor transaction senders that were involved in the consensus are the 3 - // coprocessor transaction senders, after the consensus is reached - const proofRejectionConsensusTxSenders3 = await MultichainACL.getDelegateAccountConsensusTxSenders( - hostChainId, - newDelegationAccounts, - allowedContracts, - ); - expect(proofRejectionConsensusTxSenders3).to.deep.equal(expectedCoprocessorTxSenders3); - }); - - it("Should revert because coprocessor tries to delegate account twice", async function () { - await expect( - MultichainACL.connect(coprocessorTxSenders[0]).delegateAccount( - hostChainId, - delegationAccounts, - allowedContracts, - ), - ) - .revertedWithCustomError(MultichainACL, "CoprocessorAlreadyDelegated") - .withArgs(hostChainId, toValues(delegationAccounts), allowedContracts, coprocessorTxSenders[0].address); - }); - - it("Should revert because the transaction sender is not a coprocessor", async function () { - await expect( - MultichainACL.connect(fakeTxSender).delegateAccount(hostChainId, delegationAccounts, allowedContracts), - ) - .revertedWithCustomError(MultichainACL, "NotCoprocessorTxSender") - .withArgs(fakeTxSender.address); - }); - - it("Should revert because the contracts list is empty", async function () { - await expect( - MultichainACL.connect(coprocessorTxSenders[0]).delegateAccount(hostChainId, delegationAccounts, []), - ).revertedWithCustomError(MultichainACL, "EmptyContractAddresses"); - }); - - it("Should revert because the contracts list exceeds the maximum length", async function () { - // Define an invalid large list of contract addresses - const largeContractAddresses = createRandomAddresses(15); - - await expect( - MultichainACL.connect(coprocessorTxSenders[0]).delegateAccount( - hostChainId, - delegationAccounts, - largeContractAddresses, - ), - ) - .revertedWithCustomError(MultichainACL, "ContractsMaxLengthExceeded") - .withArgs(MAX_CONTRACT_ADDRESSES, largeContractAddresses.length); - }); - - it("Should be true because the account is delegated", async function () { - expect( - await MultichainACL.connect(coprocessorTxSenders[0]).isAccountDelegated( - hostChainId, - delegationAccounts, - allowedContracts, - ), - ).to.be.true; - }); - - it("Should be false because the delegation has been made on a different host chain", async function () { - expect( - await MultichainACL.connect(coprocessorTxSenders[0]).isAccountDelegated( - fakeHostChainId, - delegationAccounts, - allowedContracts, - ), - ).to.be.false; - }); - - it("Should be false because the contract addresses list is empty", async function () { - expect( - await MultichainACL.connect(coprocessorTxSenders[0]).isAccountDelegated(hostChainId, delegationAccounts, []), - ).to.be.false; - }); - - it("Should be false because the delegation has been made with a different delegator address", async function () { - const fakeDelegationAccounts: DelegationAccountsStruct = { - delegatorAddress: newDelegator, - delegatedAddress: delegated, - }; - - expect( - await MultichainACL.connect(coprocessorTxSenders[0]).isAccountDelegated( - hostChainId, - fakeDelegationAccounts, - allowedContracts, - ), - ).to.be.false; - }); - - it("Should be false because the delegation has been made with a different delegated address", async function () { - const fakeDelegationAccounts: DelegationAccountsStruct = { - delegatorAddress: delegator, - delegatedAddress: newDelegated, - }; - - expect( - await MultichainACL.connect(coprocessorTxSenders[0]).isAccountDelegated( - hostChainId, - fakeDelegationAccounts, - allowedContracts, - ), - ).to.be.false; - }); - }); }); diff --git a/gateway-contracts/test/mocks/mocks.ts b/gateway-contracts/test/mocks/mocks.ts index 2869d7421..62ee78f32 100644 --- a/gateway-contracts/test/mocks/mocks.ts +++ b/gateway-contracts/test/mocks/mocks.ts @@ -186,29 +186,6 @@ describe("Mock contracts", function () { ); }); - it("Should emit UserDecryptionRequest event on delegated user decryption request", async function () { - userDecryptionCounterId++; - await expect( - decryptionMock.delegatedUserDecryptionRequest( - EmptyArray, - DefaultRequestValidity, - DefaultDelegationAccounts, - DefaultContractsInfo, - DefaultBytes, - DefaultBytes, - DefaultBytes, - ), - ) - .to.emit(decryptionMock, "UserDecryptionRequest") - .withArgs( - userDecryptionCounterId, - toValues([DefaultSnsCiphertextMaterial]), - DefaultAddress, - DefaultBytes, - DefaultBytes, - ); - }); - it("Should emit response and consensus events on user decryption response", async function () { await expect( decryptionMock.userDecryptionResponse(userDecryptionCounterId, DefaultBytes, DefaultBytes, DefaultBytes), @@ -357,11 +334,5 @@ describe("Mock contracts", function () { .to.emit(MultichainACLMock, "AllowAccount") .withArgs(DefaultBytes32, DefaultAddress); }); - - it("Should emit DelegateAccount event on delegate account call", async function () { - await expect(MultichainACLMock.delegateAccount(DefaultUint256, DefaultDelegationAccounts, [DefaultAddress])) - .to.emit(MultichainACLMock, "DelegateAccount") - .withArgs(DefaultUint256, toValues(DefaultDelegationAccounts), [DefaultAddress]); - }); }); }); diff --git a/gateway-contracts/test/utils/kmsRequestIds.ts b/gateway-contracts/test/utils/kmsRequestIds.ts index aa5436631..9874f071e 100644 --- a/gateway-contracts/test/utils/kmsRequestIds.ts +++ b/gateway-contracts/test/utils/kmsRequestIds.ts @@ -1,6 +1,6 @@ // Build the KMS request types as defined in contracts const enum KmsRequestType { - OldDecryptions = 0, // DEPRECATED + _deprecated_ = 0, // DEPRECATED PublicDecrypt = 1, UserDecrypt = 2, PrepKeygen = 3, diff --git a/host-contracts/README.md b/host-contracts/README.md index 4000dcbcd..452de5cdb 100644 --- a/host-contracts/README.md +++ b/host-contracts/README.md @@ -1,3 +1,3 @@ ## Introduction -This node package contains all the Solidity core contracts needed to deploy an FHEVM instance. +This node package contains the core Solidity host contracts needed to deploy an FHEVM instance on a host EVM blockchain. diff --git a/host-contracts/contracts/ACL.sol b/host-contracts/contracts/ACL.sol index c69b0978e..30b0d97e3 100644 --- a/host-contracts/contracts/ACL.sol +++ b/host-contracts/contracts/ACL.sol @@ -17,28 +17,9 @@ import {ACLEvents} from "./ACLEvents.sol"; * secure while still being usable within authorized contexts. */ contract ACL is UUPSUpgradeableEmptyProxy, Ownable2StepUpgradeable, PausableUpgradeable, ACLEvents { - /// @notice Returned if the delegatee contract is already delegatee for sender & delegator addresses. - /// @param delegatee delegatee address. - /// @param contractAddress contract address. - error AlreadyDelegated(address delegatee, address contractAddress); - - /// @notice Returned if the sender is the delegatee address. - error SenderCannotBeContractAddress(address contractAddress); - - /// @notice Returned if the contractAddresses array is empty. - error ContractAddressesIsEmpty(); - - /// @notice Maximum length of contractAddresses array exceeded. - error ContractAddressesMaxLengthExceeded(); - /// @notice Returned if the handlesList array is empty. error HandlesListIsEmpty(); - /// @notice Returned if the the delegatee contract is not already delegatee for sender & delegator addresses. - /// @param delegatee delegatee address. - /// @param contractAddress contract address. - error NotDelegatedYet(address delegatee, address contractAddress); - /// @notice Returned if the sender address is not allowed to pause the contract. error NotPauser(address sender); @@ -50,7 +31,6 @@ contract ACL is UUPSUpgradeableEmptyProxy, Ownable2StepUpgradeable, PausableUpgr struct ACLStorage { mapping(bytes32 handle => mapping(address account => bool isAllowed)) persistedAllowedPairs; mapping(bytes32 handle => bool isAllowedForDecryption) allowedForDecryption; - mapping(address account => mapping(address delegatee => mapping(address contractAddress => bool isDelegate))) delegates; } /// @notice Name of the contract. @@ -71,9 +51,6 @@ contract ACL is UUPSUpgradeableEmptyProxy, Ownable2StepUpgradeable, PausableUpgr /// @notice PauserSet contract. IPauserSet private constant PAUSER_SET = IPauserSet(pauserSetAdd); - /// @notice maximum length of contractAddresses array during delegation. - uint256 private constant MAX_NUM_CONTRACT_ADDRESSES = 10; - /// Constant used for making sure the version number used in the `reinitializer` modifier is /// identical between `initializeFromEmptyProxy` and the `reinitializeVX` method uint64 private constant REINITIALIZER_VERSION = 2; @@ -162,59 +139,6 @@ contract ACL is UUPSUpgradeableEmptyProxy, Ownable2StepUpgradeable, PausableUpgr } } - /** - * @notice Delegates the access of handles in the context of account abstraction for issuing - * reencryption requests from a smart contract account. - * @param delegatee Delegatee address. - * @param contractAddresses Contract addresses. - */ - function delegateAccount(address delegatee, address[] memory contractAddresses) public virtual whenNotPaused { - uint256 lengthContractAddresses = contractAddresses.length; - if (lengthContractAddresses == 0) { - revert ContractAddressesIsEmpty(); - } - if (lengthContractAddresses > MAX_NUM_CONTRACT_ADDRESSES) { - revert ContractAddressesMaxLengthExceeded(); - } - - ACLStorage storage $ = _getACLStorage(); - for (uint256 k = 0; k < lengthContractAddresses; k++) { - if (contractAddresses[k] == msg.sender) { - revert SenderCannotBeContractAddress(contractAddresses[k]); - } - if ($.delegates[msg.sender][delegatee][contractAddresses[k]]) { - revert AlreadyDelegated(delegatee, contractAddresses[k]); - } - $.delegates[msg.sender][delegatee][contractAddresses[k]] = true; - } - - emit NewDelegation(msg.sender, delegatee, contractAddresses); - } - - /** - * @notice Revokes delegated access of handles in the context of account abstraction for issuing - * reencryption requests from a smart contract account. - * @param delegatee Delegatee address. - * @param contractAddresses Contract addresses. - */ - function revokeDelegation(address delegatee, address[] memory contractAddresses) public virtual whenNotPaused { - uint256 lengthContractAddresses = contractAddresses.length; - if (lengthContractAddresses == 0) { - revert ContractAddressesIsEmpty(); - } - - ACLStorage storage $ = _getACLStorage(); - - for (uint256 k = 0; k < lengthContractAddresses; k++) { - if (!$.delegates[msg.sender][delegatee][contractAddresses[k]]) { - revert NotDelegatedYet(delegatee, contractAddresses[k]); - } - $.delegates[msg.sender][delegatee][contractAddresses[k]] = false; - } - - emit RevokedDelegation(msg.sender, delegatee, contractAddresses); - } - /** * @dev Triggers stopped state. * Only a pauser address can pause. @@ -236,27 +160,6 @@ contract ACL is UUPSUpgradeableEmptyProxy, Ownable2StepUpgradeable, PausableUpgr _unpause(); } - /** - * @notice Returns whether the delegatee is allowed to access the handle. - * @param delegatee Delegatee address. - * @param handle Handle. - * @param contractAddress Contract address. - * @param account Address of the account. - * @return isAllowed Whether the handle can be accessed. - */ - function allowedOnBehalf( - address delegatee, - bytes32 handle, - address contractAddress, - address account - ) public view virtual returns (bool) { - ACLStorage storage $ = _getACLStorage(); - return - $.persistedAllowedPairs[handle][account] && - $.persistedAllowedPairs[handle][contractAddress] && - $.delegates[account][delegatee][contractAddress]; - } - /** * @notice Checks whether the account is allowed to use the handle in the * same transaction (transient). diff --git a/host-contracts/contracts/ACLEvents.sol b/host-contracts/contracts/ACLEvents.sol index a7f5f5229..6c8f8deb8 100644 --- a/host-contracts/contracts/ACLEvents.sol +++ b/host-contracts/contracts/ACLEvents.sol @@ -12,20 +12,4 @@ contract ACLEvents { /// @param caller account calling the allowForDecryption function. /// @param handlesList List of handles allowed for decryption. event AllowedForDecryption(address indexed caller, bytes32[] handlesList); - - /// @notice Emitted when a new delegatee address is added. - /// @param caller caller address - /// @param delegatee Delegatee address. - /// @param contractAddresses Contract addresses. - event NewDelegation(address indexed caller, address indexed delegatee, address[] contractAddresses); - - /// @notice Emitted when a delegatee address is revoked. - /// @param caller caller address - /// @param delegatee Delegatee address. - /// @param contractAddresses Contract addresses. - event RevokedDelegation(address indexed caller, address indexed delegatee, address[] contractAddresses); - - /// @notice Emitted when the pauser address is updated. - /// @param newPauser New pauser address. - event UpdatePauser(address indexed newPauser); } diff --git a/host-contracts/docs/contract_selectors.txt b/host-contracts/docs/contract_selectors.txt index 0aa69da04..8c0c682f2 100644 --- a/host-contracts/docs/contract_selectors.txt +++ b/host-contracts/docs/contract_selectors.txt @@ -1,143 +1,115 @@ ACL -ā•­----------+--------------------------------------------------+--------------------------------------------------------------------ā•® -| Type | Signature | Selector | -+==================================================================================================================================+ -| Function | UPGRADE_INTERFACE_VERSION() | 0xad3cb1cc | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | acceptOwnership() | 0x79ba5097 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | allow(bytes32,address) | 0xb9496b62 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | allowForDecryption(bytes32[]) | 0xfadd2246 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | allowTransient(bytes32,address) | 0x3e395cec | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | allowedOnBehalf(address,bytes32,address,address) | 0xf72164de | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | allowedTransient(bytes32,address) | 0x74b79a5a | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | cleanTransientStorage() | 0x35334c23 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | delegateAccount(address,address[]) | 0x531efc92 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | getFHEVMExecutorAddress() | 0x268d6d31 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | getPauserSetAddress() | 0x2490fc9a | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | getVersion() | 0x0d8e6e2c | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | initializeFromEmptyProxy() | 0x39f73810 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | isAllowed(bytes32,address) | 0x82027b6d | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | isAllowedForDecryption(bytes32) | 0xc0d02943 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | isPauser(address) | 0x46fbf68e | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | owner() | 0x8da5cb5b | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | pause() | 0x8456cb59 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | paused() | 0x5c975abb | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | pendingOwner() | 0xe30c3978 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | persistAllowed(bytes32,address) | 0x1e2f86ba | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | proxiableUUID() | 0x52d1902d | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | renounceOwnership() | 0x715018a6 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | revokeDelegation(address,address[]) | 0x088563e8 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | transferOwnership(address) | 0xf2fde38b | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | unpause() | 0x3f4ba83a | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Function | upgradeToAndCall(address,bytes) | 0x4f1ef286 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Event | Allowed(address,address,bytes32) | 0xe2e1decee6e05ee246cd7c7f1337d25cdfd41dcbdcf8c57b61630be56cc7366a | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Event | AllowedForDecryption(address,bytes32[]) | 0xd913ac93a959116526793ef772233273d5249597d33cddfdc34f29920541fd0a | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Event | Initialized(uint64) | 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Event | NewDelegation(address,address,address[]) | 0x6ac533ce8df9b9d2a4842715e991ef317c4a8148d2dbc0a5109ce6979de353e5 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Event | OwnershipTransferStarted(address,address) | 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Event | OwnershipTransferred(address,address) | 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Event | Paused(address) | 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Event | RevokedDelegation(address,address,address[]) | 0x7c0a18a6132447b7c9f34ae509fec1dba0cb0ff0bdd1704b99779a1c744a138e | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Event | Unpaused(address) | 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Event | UpdatePauser(address) | 0xa690668c24d277243ff6fa650d3fd6e3d331a99ca0a8857c82e7f89452fc665d | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Event | Upgraded(address) | 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | AddressEmptyCode(address) | 0x9996b315 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | AlreadyDelegated(address,address) | 0xf8e7903c | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | ContractAddressesIsEmpty() | 0x5f5eb41c | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | ContractAddressesMaxLengthExceeded() | 0xcb586cd6 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | ERC1967InvalidImplementation(address) | 0x4c9c8ce3 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | ERC1967NonPayable() | 0xb398979f | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | EnforcedPause() | 0xd93c0665 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | ExpectedPause() | 0x8dfc202b | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | FailedCall() | 0xd6bda275 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | HandlesListIsEmpty() | 0x70bd1996 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | InvalidInitialization() | 0xf92ee8a9 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | NotDelegatedYet(address,address) | 0x22101061 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | NotInitializing() | 0xd7e6bcf8 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | NotInitializingFromEmptyProxy() | 0x6f4f731f | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | NotPauser(address) | 0x206a346e | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | OwnableInvalidOwner(address) | 0x1e4fbdf7 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | OwnableUnauthorizedAccount(address) | 0x118cdaa7 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | SenderCannotBeContractAddress(address) | 0x61241b58 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | SenderNotAllowed(address) | 0xd0d25976 | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | UUPSUnauthorizedCallContext() | 0xe07c8dba | -|----------+--------------------------------------------------+--------------------------------------------------------------------| -| Error | UUPSUnsupportedProxiableUUID(bytes32) | 0xaa1d49a4 | -ā•°----------+--------------------------------------------------+--------------------------------------------------------------------╯ +ā•­----------+-------------------------------------------+--------------------------------------------------------------------ā•® +| Type | Signature | Selector | ++===========================================================================================================================+ +| Function | UPGRADE_INTERFACE_VERSION() | 0xad3cb1cc | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | acceptOwnership() | 0x79ba5097 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | allow(bytes32,address) | 0xb9496b62 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | allowForDecryption(bytes32[]) | 0xfadd2246 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | allowTransient(bytes32,address) | 0x3e395cec | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | allowedTransient(bytes32,address) | 0x74b79a5a | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | cleanTransientStorage() | 0x35334c23 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | getFHEVMExecutorAddress() | 0x268d6d31 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | getPauserSetAddress() | 0x2490fc9a | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | getVersion() | 0x0d8e6e2c | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | initializeFromEmptyProxy() | 0x39f73810 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | isAllowed(bytes32,address) | 0x82027b6d | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | isAllowedForDecryption(bytes32) | 0xc0d02943 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | isPauser(address) | 0x46fbf68e | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | owner() | 0x8da5cb5b | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | pause() | 0x8456cb59 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | paused() | 0x5c975abb | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | pendingOwner() | 0xe30c3978 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | persistAllowed(bytes32,address) | 0x1e2f86ba | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | proxiableUUID() | 0x52d1902d | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | renounceOwnership() | 0x715018a6 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | transferOwnership(address) | 0xf2fde38b | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | unpause() | 0x3f4ba83a | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Function | upgradeToAndCall(address,bytes) | 0x4f1ef286 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Event | Allowed(address,address,bytes32) | 0xe2e1decee6e05ee246cd7c7f1337d25cdfd41dcbdcf8c57b61630be56cc7366a | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Event | AllowedForDecryption(address,bytes32[]) | 0xd913ac93a959116526793ef772233273d5249597d33cddfdc34f29920541fd0a | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Event | Initialized(uint64) | 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Event | OwnershipTransferStarted(address,address) | 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Event | OwnershipTransferred(address,address) | 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Event | Paused(address) | 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Event | Unpaused(address) | 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Event | Upgraded(address) | 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Error | AddressEmptyCode(address) | 0x9996b315 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Error | ERC1967InvalidImplementation(address) | 0x4c9c8ce3 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Error | ERC1967NonPayable() | 0xb398979f | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Error | EnforcedPause() | 0xd93c0665 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Error | ExpectedPause() | 0x8dfc202b | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Error | FailedCall() | 0xd6bda275 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Error | HandlesListIsEmpty() | 0x70bd1996 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Error | InvalidInitialization() | 0xf92ee8a9 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Error | NotInitializing() | 0xd7e6bcf8 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Error | NotInitializingFromEmptyProxy() | 0x6f4f731f | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Error | NotPauser(address) | 0x206a346e | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Error | OwnableInvalidOwner(address) | 0x1e4fbdf7 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Error | OwnableUnauthorizedAccount(address) | 0x118cdaa7 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Error | SenderNotAllowed(address) | 0xd0d25976 | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Error | UUPSUnauthorizedCallContext() | 0xe07c8dba | +|----------+-------------------------------------------+--------------------------------------------------------------------| +| Error | UUPSUnsupportedProxiableUUID(bytes32) | 0xaa1d49a4 | +ā•°----------+-------------------------------------------+--------------------------------------------------------------------╯ ACLEvents -ā•­-------+----------------------------------------------+--------------------------------------------------------------------ā•® -| Type | Signature | Selector | -+===========================================================================================================================+ -| Event | Allowed(address,address,bytes32) | 0xe2e1decee6e05ee246cd7c7f1337d25cdfd41dcbdcf8c57b61630be56cc7366a | -|-------+----------------------------------------------+--------------------------------------------------------------------| -| Event | AllowedForDecryption(address,bytes32[]) | 0xd913ac93a959116526793ef772233273d5249597d33cddfdc34f29920541fd0a | -|-------+----------------------------------------------+--------------------------------------------------------------------| -| Event | NewDelegation(address,address,address[]) | 0x6ac533ce8df9b9d2a4842715e991ef317c4a8148d2dbc0a5109ce6979de353e5 | -|-------+----------------------------------------------+--------------------------------------------------------------------| -| Event | RevokedDelegation(address,address,address[]) | 0x7c0a18a6132447b7c9f34ae509fec1dba0cb0ff0bdd1704b99779a1c744a138e | -|-------+----------------------------------------------+--------------------------------------------------------------------| -| Event | UpdatePauser(address) | 0xa690668c24d277243ff6fa650d3fd6e3d331a99ca0a8857c82e7f89452fc665d | -ā•°-------+----------------------------------------------+--------------------------------------------------------------------╯ +ā•­-------+-----------------------------------------+--------------------------------------------------------------------ā•® +| Type | Signature | Selector | ++======================================================================================================================+ +| Event | Allowed(address,address,bytes32) | 0xe2e1decee6e05ee246cd7c7f1337d25cdfd41dcbdcf8c57b61630be56cc7366a | +|-------+-----------------------------------------+--------------------------------------------------------------------| +| Event | AllowedForDecryption(address,bytes32[]) | 0xd913ac93a959116526793ef772233273d5249597d33cddfdc34f29920541fd0a | +ā•°-------+-----------------------------------------+--------------------------------------------------------------------╯ FHEEvents diff --git a/host-contracts/package.json b/host-contracts/package.json index 2d80ccf7f..19d17dd59 100644 --- a/host-contracts/package.json +++ b/host-contracts/package.json @@ -1,6 +1,6 @@ { "name": "@fhevm/host-contracts", - "version": "0.9.0-1", + "version": "0.9.0-2", "description": "fhevm backend contracts", "repository": { "type": "git", diff --git a/host-contracts/test/acl/acl.t.sol b/host-contracts/test/acl/acl.t.sol index 4d7e07899..15b9f549f 100644 --- a/host-contracts/test/acl/acl.t.sol +++ b/host-contracts/test/acl/acl.t.sol @@ -167,183 +167,7 @@ contract ACLTest is Test { } /** - * @dev Tests that the sender can delegate to another account only if both contract and sender addresses are allowed - * to use the handle. - */ - function test_CanDelegateAccountButItIsAllowedOnBehalfOnlyIfBothContractAndSenderAreAllowed( - bytes32 handle, - address sender, - address delegatee, - address delegateeContract - ) public { - _upgradeProxy(); - vm.assume(sender != delegateeContract); - - address[] memory contractAddresses = new address[](1); - contractAddresses[0] = delegateeContract; - - vm.prank(sender); - vm.expectEmit(address(acl)); - emit ACLEvents.NewDelegation(sender, delegatee, contractAddresses); - acl.delegateAccount(delegatee, contractAddresses); - vm.assertFalse(acl.allowedOnBehalf(delegatee, handle, delegateeContract, sender)); - - /// @dev The sender and the delegatee contract must be allowed to use the handle before it delegates. - _allowHandle(handle, sender); - vm.assertFalse(acl.allowedOnBehalf(delegatee, handle, delegateeContract, sender)); - _allowHandle(handle, delegateeContract); - vm.assertTrue(acl.allowedOnBehalf(delegatee, handle, delegateeContract, sender)); - } - - /** - * @dev Tests that the sender cannot delegate to the same account twice. - */ - function test_CannotDelegateAccountToSameAccountTwice( - bytes32 handle, - address sender, - address delegatee, - address delegateeContract - ) public { - /// @dev We call the other test to avoid repeating the same code. - test_CanDelegateAccountButItIsAllowedOnBehalfOnlyIfBothContractAndSenderAreAllowed( - handle, - sender, - delegatee, - delegateeContract - ); - - address[] memory contractAddresses = new address[](1); - contractAddresses[0] = delegateeContract; - - vm.prank(sender); - vm.expectPartialRevert(ACL.AlreadyDelegated.selector); - acl.delegateAccount(delegatee, contractAddresses); - } - - /** - * @dev Tests that the sender cannot delegate to the account if contractAddresses are empty. - */ - function test_CannotDelegateIfContractAddressesAreEmpty(address sender, address delegatee) public { - _upgradeProxy(); - vm.assume(sender != delegatee); - address[] memory contractAddresses = new address[](0); - - vm.prank(sender); - vm.expectRevert(ACL.ContractAddressesIsEmpty.selector); - acl.delegateAccount(delegatee, contractAddresses); - } - - function test_CannotDelegateIfContractAddressesAboveMaxNumberContractAddresses( - address sender, - address delegatee - ) public { - _upgradeProxy(); - vm.assume(sender != delegatee); - /// @dev The max number of contract addresses is hardcoded to 10 in the ACL contract. - address[] memory contractAddresses = new address[](11); - - /// @dev Fill the array with 11 distinct addresses. - for (uint256 i = 0; i < 11; i++) { - contractAddresses[i] = address(uint160(i)); - } - - vm.prank(sender); - vm.expectRevert(ACL.ContractAddressesMaxLengthExceeded.selector); - acl.delegateAccount(delegatee, contractAddresses); - } - - /** - * @dev Tests that the sender cannot delegate to a contract address. - */ - function test_CannotDelegateIfSenderIsDelegateeContract(address sender, address delegatee) public { - _upgradeProxy(); - address[] memory contractAddresses = new address[](1); - contractAddresses[0] = sender; - - vm.prank(sender); - vm.expectPartialRevert(ACL.SenderCannotBeContractAddress.selector); - acl.delegateAccount(delegatee, contractAddresses); - } - - /** - * @dev Tests that the sender cannot delegate if account is not allowed to use the handle. - */ - function test_CanDelegateAccountIfAccountNotAllowed( - bytes32 handle, - address sender, - address delegatee, - address delegateeContract - ) public { - _upgradeProxy(); - vm.assume(sender != delegateeContract); - /// @dev Only the delegatee contract must be allowed to use the handle before it delegates. - _allowHandle(handle, delegateeContract); - - address[] memory contractAddresses = new address[](1); - contractAddresses[0] = delegateeContract; - - vm.prank(sender); - vm.expectEmit(address(acl)); - emit ACLEvents.NewDelegation(sender, delegatee, contractAddresses); - acl.delegateAccount(delegatee, contractAddresses); - - vm.assertFalse(acl.allowedOnBehalf(delegatee, handle, delegateeContract, sender)); - } - - /** - * @dev Tests that the sender can revoke delegation if the sender has already delegated. - */ - function test_CanRevokeDelegation(address sender, address delegatee, address delegateeContract) public { - _upgradeProxy(); - vm.assume(sender != delegateeContract); - - address[] memory contractAddresses = new address[](1); - contractAddresses[0] = delegateeContract; - - /// @dev Delegate the account first. - vm.prank(sender); - acl.delegateAccount(delegatee, contractAddresses); - - vm.prank(sender); - vm.expectEmit(address(acl)); - emit ACLEvents.RevokedDelegation(sender, delegatee, contractAddresses); - acl.revokeDelegation(delegatee, contractAddresses); - } - - /** - * @dev Tests that the sender cannot revoke delegation if the sender has not delegated yet. - */ - function test_CannotRevokeDelegationIfNotDelegatedYet( - address sender, - address delegatee, - address delegateeContract - ) public { - _upgradeProxy(); - vm.assume(sender != delegateeContract); - - address[] memory contractAddresses = new address[](1); - contractAddresses[0] = delegateeContract; - - vm.prank(sender); - vm.expectPartialRevert(ACL.NotDelegatedYet.selector); - acl.revokeDelegation(delegatee, contractAddresses); - } - - /** - * @dev Tests that the sender cannot revoke delegation if the contract addresses are empty. - */ - function test_CannotRevokeDelegationIfEmptyConctractAddresses(address sender, address delegatee) public { - _upgradeProxy(); - vm.assume(sender != delegatee); - address[] memory contractAddresses = new address[](0); - - vm.prank(sender); - vm.expectRevert(ACL.ContractAddressesIsEmpty.selector); - acl.revokeDelegation(delegatee, contractAddresses); - } - - /** - * @dev Tests that the sender cannot delegate if the handle list is empty. + * @dev Tests that the sender cannot allo for decrypt if the handle list is empty. */ function test_NoOneCanAllowForDecryptionIfEmptyList(address sender) public { _upgradeProxy(); @@ -491,48 +315,6 @@ contract ACLTest is Test { acl.allowForDecryption(new bytes32[](1)); } - /** - * @dev Tests that delegateAccount() cannot be called if the contract is paused. - */ - function test_CannotDelegateAccountIfPaused(address sender, address delegatee, address delegateeContract) public { - _upgradeProxy(); - vm.assume(sender != delegateeContract); - - address[] memory contractAddresses = new address[](1); - contractAddresses[0] = delegateeContract; - - vm.prank(sender); - acl.delegateAccount(delegatee, contractAddresses); - - vm.prank(pauser); - acl.pause(); - - vm.prank(sender); - vm.expectRevert(PausableUpgradeable.EnforcedPause.selector); - acl.delegateAccount(delegatee, contractAddresses); - } - - /** - * @dev Tests that revokeDelegation() cannot be called if the contract is paused. - */ - function test_CannotRevokeDelegationIfPaused(address sender, address delegatee, address delegateeContract) public { - _upgradeProxy(); - vm.assume(sender != delegateeContract); - - address[] memory contractAddresses = new address[](1); - contractAddresses[0] = delegateeContract; - - vm.prank(sender); - acl.delegateAccount(delegatee, contractAddresses); - - vm.prank(pauser); - acl.pause(); - - vm.prank(sender); - vm.expectRevert(PausableUpgradeable.EnforcedPause.selector); - acl.revokeDelegation(delegatee, contractAddresses); - } - /** * @dev Tests that only the owner can authorize an upgrade. */ diff --git a/kms-connector/Cargo.lock b/kms-connector/Cargo.lock index f610cd314..9b9f5fed1 100644 --- a/kms-connector/Cargo.lock +++ b/kms-connector/Cargo.lock @@ -2983,7 +2983,7 @@ dependencies = [ [[package]] name = "fhevm_gateway_bindings" version = "0.1.0-rc14" -source = "git+https://github.com/zama-ai/fhevm.git?rev=70ccca7509de4e5ec9eb897943b861c679e56376#70ccca7509de4e5ec9eb897943b861c679e56376" +source = "git+https://github.com/zama-ai/fhevm.git?tag=v0.9.0#6f108f405b21beed28182a180a039aa77e030b4c" dependencies = [ "alloy", "serde", diff --git a/kms-connector/Cargo.toml b/kms-connector/Cargo.toml index 41ef061c9..28a300539 100644 --- a/kms-connector/Cargo.toml +++ b/kms-connector/Cargo.toml @@ -18,7 +18,7 @@ gw-listener.path = "crates/gw-listener" kms-worker.path = "crates/kms-worker" tx-sender.path = "crates/tx-sender" connector-utils.path = "crates/utils" -fhevm_gateway_bindings = { git = "https://github.com/zama-ai/fhevm.git", rev = "70ccca7509de4e5ec9eb897943b861c679e56376", default-features = false } +fhevm_gateway_bindings = { git = "https://github.com/zama-ai/fhevm.git", tag = "v0.9.0", default-features = false } kms-grpc = { git = "https://github.com/zama-ai/kms.git", tag = "v0.12.0", default-features = true } bc2wrap = { git = "https://github.com/zama-ai/kms.git", tag = "v0.12.0", default-features = true } tfhe = "=1.4.0-alpha.3" diff --git a/kms-connector/config/kms-worker.toml b/kms-connector/config/kms-worker.toml index 8d0b38cc4..0d02f4b11 100644 --- a/kms-connector/config/kms-worker.toml +++ b/kms-connector/config/kms-worker.toml @@ -71,9 +71,9 @@ address = "0x5ffdaAB0373E62E2ea2944776209aEf29E631A64" # ENV: KMS_CONNECTOR_HEALTHCHECK_TIMEOUT_SECS # healthcheck_timeout_secs = 3 -# The limit number of events to fetch from the database (optional, defaults to 10) +# The limit number of events to fetch from the database (optional, defaults to 50) # ENV: KMS_CONNECTOR_EVENTS_BATCH_SIZE -# events_batch_size = 10 +# events_batch_size = 50 # Number of retries for GRPC requests sent to the KMS Core (optional, defaults to 3) # ENV: KMS_CONNECTOR_GRPC_REQUEST_RETRIES @@ -87,9 +87,9 @@ address = "0x5ffdaAB0373E62E2ea2944776209aEf29E631A64" # ENV: KMS_CONNECTOR_USER_DECRYPTION_TIMEOUT_SECS # user_decryption_timeout_secs = 300 -# Retry interval to poll GRPC responses from KMS Core in seconds (optional, defaults to 5s) +# Retry interval to poll GRPC responses from KMS Core in seconds (optional, defaults to 1s) # ENV: KMS_CONNECTOR_GRPC_POLL_INTERVAL_SECS -# grpc_poll_interval_secs = 5 +# grpc_poll_interval_secs = 1 # Number of retries for S3 ciphertext retrieval (optional, default: 3). # ENV: KMS_CONNECTOR_S3_CIPHERTEXT_RETRIEVAL_RETRIES diff --git a/kms-connector/config/tx-sender.toml b/kms-connector/config/tx-sender.toml index b11d05f19..0d0eda3ee 100644 --- a/kms-connector/config/tx-sender.toml +++ b/kms-connector/config/tx-sender.toml @@ -70,13 +70,13 @@ private_key = "8da4ef21b864d2cc526dbdb2a120bd2874c36c9d0a1fb7f8c63d7f7a8b41de8f" # ENV: KMS_CONNECTOR_HEALTHCHECK_TIMEOUT_SECS # healthcheck_timeout_secs = 3 -# The limit number of KMS Core responses to fetch from the database (optional, defaults to 10) +# The limit number of KMS Core responses to fetch from the database (optional, defaults to 50) # ENV: KMS_CONNECTOR_RESPONSES_BATCH_SIZE -# responses_batch_size = 10 +# responses_batch_size = 50 -# Number of retries for transactions sent to the Gateway (optional, defaults to 3) +# Number of retries for transactions sent to the Gateway (optional, defaults to 4) # ENV: KMS_CONNECTOR_TX_RETRIES -# tx_retries = 3 +# tx_retries = 4 # Interval between retries for transactions sent to the Gateway, in milliseconds (optional, defaults to 100ms) # ENV: KMS_CONNECTOR_TX_RETRY_INTERVAL_MS @@ -86,9 +86,9 @@ private_key = "8da4ef21b864d2cc526dbdb2a120bd2874c36c9d0a1fb7f8c63d7f7a8b41de8f" # ENV: KMS_CONNECTOR_TRACE_REVERTED_TX # trace_reverted_tx = true -# The gas multiplier percentage after each transaction attempt (optional, defaults to 130%) +# The gas multiplier percentage after each transaction attempt (optional, defaults to 115%) # ENV: KMS_CONNECTOR_GAS_MULTIPLIER_PERCENT -# gas_multiplier_percent = 130 +# gas_multiplier_percent = 115 # The maximum number of tasks to process events/responses concurrently (optional, defaults to 1000) # ENV: KMS_CONNECTOR_TASK_LIMIT diff --git a/kms-connector/crates/kms-worker/src/core/config/raw.rs b/kms-connector/crates/kms-worker/src/core/config/raw.rs index 330d67aca..2a8109407 100644 --- a/kms-connector/crates/kms-worker/src/core/config/raw.rs +++ b/kms-connector/crates/kms-worker/src/core/config/raw.rs @@ -74,7 +74,7 @@ fn default_database_polling_timeout_secs() -> u64 { } fn default_events_batch_size() -> u8 { - 10 + 50 } fn default_grpc_request_retries() -> u8 { @@ -90,7 +90,7 @@ fn default_user_decryption_timeout() -> u64 { } fn default_grpc_poll_interval() -> u64 { - 5 // 5 seconds + 1 // 1 seconds } fn default_s3_ciphertext_retrieval_retries() -> u8 { diff --git a/kms-connector/crates/kms-worker/src/core/event_processor/s3.rs b/kms-connector/crates/kms-worker/src/core/event_processor/s3.rs index b720dbbc9..c43847c0d 100644 --- a/kms-connector/crates/kms-worker/src/core/event_processor/s3.rs +++ b/kms-connector/crates/kms-worker/src/core/event_processor/s3.rs @@ -300,15 +300,9 @@ where ) -> anyhow::Result { info!("S3 CIPHERTEXT RETRIEVAL START: from bucket {s3_bucket_url}, digest {digest_hex}"); - // Direct HTTP retrieval let direct_url = format!("{s3_bucket_url}/{digest_hex}"); let (ciphertext, ct_format) = self.direct_http_retrieval(&direct_url).await?; - - // TODO: once tfhe-rs is upgraded to 1.3, replace map().unwrap_or() by ? - // Right now it fails test when facing unknown types - let fhe_type = extract_fhe_type_from_handle(handle) - .map(|t| t as i32) - .unwrap_or(0); + let fhe_type = extract_fhe_type_from_handle(handle)?; info!( handle = hex::encode(handle), @@ -331,7 +325,7 @@ where Ok(TypedCiphertext { ciphertext, external_handle: handle.to_vec(), - fhe_type, + fhe_type: fhe_type as i32, ciphertext_format: ct_format.into(), }) } diff --git a/kms-connector/crates/kms-worker/tests/s3.rs b/kms-connector/crates/kms-worker/tests/s3.rs index 3dda962c8..d1cad8ab8 100644 --- a/kms-connector/crates/kms-worker/tests/s3.rs +++ b/kms-connector/crates/kms-worker/tests/s3.rs @@ -4,7 +4,7 @@ use alloy::{ }; use connector_utils::tests::{ rand::rand_u256, - setup::{S3_CT, S3Instance, TestInstance}, + setup::{S3_CT_DIGEST, S3_CT_HANDLE, S3Instance, TestInstance}, }; use kms_worker::core::{Config, event_processor::s3::S3Service}; @@ -16,11 +16,15 @@ async fn test_get_ciphertext_from_s3() -> anyhow::Result<()> { let config = Config::default(); let mock_provider = ProviderBuilder::new().connect_mocked_client(Asserter::new()); - let handle = rand_u256().to_be_bytes_vec(); // dummy handle let bucket_url = format!("{}/ct128", test_instance.s3_url()); let s3_service = S3Service::new(&config, mock_provider); s3_service - .retrieve_s3_ciphertext_with_retry(vec![bucket_url], &handle, &hex::decode(S3_CT)?, S3_CT) + .retrieve_s3_ciphertext_with_retry( + vec![bucket_url], + &hex::decode(S3_CT_HANDLE)?, + &hex::decode(S3_CT_DIGEST)?, + S3_CT_DIGEST, + ) .await .unwrap(); diff --git a/kms-connector/crates/tx-sender/src/core/config/raw.rs b/kms-connector/crates/tx-sender/src/core/config/raw.rs index baf23d561..b1de87eef 100644 --- a/kms-connector/crates/tx-sender/src/core/config/raw.rs +++ b/kms-connector/crates/tx-sender/src/core/config/raw.rs @@ -52,7 +52,7 @@ fn default_database_polling_timeout_secs() -> u64 { } fn default_tx_retries() -> u8 { - 3 + 4 } fn default_tx_retry_interval_ms() -> u64 { @@ -64,11 +64,11 @@ fn default_trace_reverted_tx() -> bool { } fn default_responses_batch_size() -> u8 { - 10 + 50 } fn default_gas_multiplier_percent() -> usize { - 300 // 300% gas increase by default + 115 // 115% gas increase by default } impl DeserializeRawConfig for RawConfig {} diff --git a/kms-connector/crates/tx-sender/src/core/tx_sender.rs b/kms-connector/crates/tx-sender/src/core/tx_sender.rs index ea000322b..597c19d01 100644 --- a/kms-connector/crates/tx-sender/src/core/tx_sender.rs +++ b/kms-connector/crates/tx-sender/src/core/tx_sender.rs @@ -9,7 +9,9 @@ use crate::{ }; use alloy::{ hex, - providers::{PendingTransactionError, Provider, ext::DebugApi}, + providers::{ + PendingTransactionError, Provider, RootProvider, ext::DebugApi, fillers::TxFiller, + }, rpc::types::{ TransactionReceipt, TransactionRequest, trace::geth::{CallConfig, GethDebugTracingOptions}, @@ -18,7 +20,8 @@ use alloy::{ }; use anyhow::anyhow; use connector_utils::{ - conn::{WalletGatewayProvider, connect_to_db, connect_to_gateway_with_wallet}, + conn::{WalletGatewayProviderFillers, connect_to_db, connect_to_gateway_with_wallet}, + provider::NonceManagedProvider, tasks::spawn_with_limit, types::{ CrsgenResponse, KeygenResponse, KmsResponse, PrepKeygenResponse, PublicDecryptionResponse, @@ -36,25 +39,34 @@ use tokio_util::sync::CancellationToken; use tracing::{debug, error, info, warn}; /// Struct sending stored KMS Core's responses to the Gateway. -pub struct TransactionSender { +pub struct TransactionSender +where + F: TxFiller, + P: Provider, +{ /// The entity used to collect stored KMS Core's responses. response_picker: L, /// The entity responsible to send transaction to the Gateway. - inner: TransactionSenderInner

, + inner: TransactionSenderInner, /// The entity used to remove stored KMS Core's responses. response_remover: R, } -impl TransactionSender +impl TransactionSender where L: KmsResponsePicker, + F: TxFiller + 'static, P: Provider + Clone + 'static, R: KmsResponseRemover + Clone + 'static, { /// Creates a new `TransactionSender` instance. - pub fn new(response_picker: L, inner: TransactionSenderInner

, response_remover: R) -> Self { + pub fn new( + response_picker: L, + inner: TransactionSenderInner, + response_remover: R, + ) -> Self { Self { response_picker, inner, @@ -105,7 +117,7 @@ where /// Handles a response coming from the KMS Core. #[tracing::instrument(skip(inner, response_remover, cancel_token), fields(response = %response))] async fn handle_response( - inner: TransactionSenderInner

, + inner: TransactionSenderInner, response_remover: R, response: KmsResponse, cancel_token: CancellationToken, @@ -125,7 +137,14 @@ where } } -impl TransactionSender { +impl + TransactionSender< + DbKmsResponsePicker, + WalletGatewayProviderFillers, + RootProvider, + DbKmsResponseRemover, + > +{ /// Creates a new `TransactionSender` instance from a valid `Config`. pub async fn from_config(config: Config) -> anyhow::Result<(Self, State)> { let db_pool = connect_to_db(&config.database_url, config.database_pool_size).await?; @@ -162,10 +181,14 @@ impl TransactionSender { - provider: P, - decryption_contract: DecryptionInstance

, - kms_generation_contract: KMSGenerationInstance

, +pub struct TransactionSenderInner +where + F: TxFiller, + P: Provider, +{ + provider: NonceManagedProvider, + decryption_contract: DecryptionInstance>, + kms_generation_contract: KMSGenerationInstance>, config: TransactionSenderInnerConfig, } @@ -177,11 +200,15 @@ pub struct TransactionSenderInnerConfig { pub gas_multiplier_percent: usize, } -impl TransactionSenderInner

{ +impl TransactionSenderInner +where + F: TxFiller, + P: Provider, +{ pub fn new( - provider: P, - decryption_contract: DecryptionInstance

, - kms_generation_contract: KMSGenerationInstance

, + provider: NonceManagedProvider, + decryption_contract: DecryptionInstance>, + kms_generation_contract: KMSGenerationInstance>, inner_config: TransactionSenderInnerConfig, ) -> Self { Self { @@ -213,28 +240,13 @@ impl TransactionSenderInner

{ })?; debug!("Transaction receipt: {:?}", receipt); - if receipt.status() { - GATEWAY_TX_SENT_COUNTER.inc(); - info!( - tx_hash = hex::encode(receipt.transaction_hash), - block_hash = receipt.block_hash.map(hex::encode), - "Response successfully sent to the Gateway!" - ); - Ok(()) - } else { - GATEWAY_TX_SENT_ERRORS.inc(); - let revert_reason = self - .get_revert_reason(&receipt) - .await - .unwrap_or_else(|e| e.to_string()); - error!( - tx_hash = hex::encode(receipt.transaction_hash), - "Failed to send response to the Gateway: {revert_reason}" - ); - Err(Error::Recoverable(anyhow!( - "Failed to send response to the Gateway: {revert_reason}" - ))) - } + GATEWAY_TX_SENT_COUNTER.inc(); + info!( + tx_hash = hex::encode(receipt.transaction_hash), + block_hash = receipt.block_hash.map(hex::encode), + "Response successfully sent to the Gateway!" + ); + Ok(()) } pub async fn send_public_decryption_response( @@ -317,7 +329,7 @@ impl TransactionSenderInner

{ let current_gas = match call.gas { Some(gas) => gas, None => self - .decryption_contract + .kms_generation_contract .provider() .estimate_gas(call.clone()) .await @@ -366,12 +378,23 @@ impl TransactionSenderInner

{ &self, mut call: TransactionRequest, ) -> Result { + // Force a fresh gas estimation on each attempt to account for state drift + call.gas = None; self.overprovision_gas(&mut call).await?; - Ok(self - .provider - .client() - .request("eth_sendTransactionSync", (call.clone(),)) - .await?) + + let receipt = self.provider.send_transaction_sync(call).await?; + if !receipt.status() { + let revert_reason = self + .get_revert_reason(&receipt) + .await + .unwrap_or_else(|e| e.to_string()); + + return Err(Error::Recoverable(anyhow!( + "{revert_reason}. Tx hash {}", + hex::encode(receipt.transaction_hash) + ))); + } + Ok(receipt) } /// Tries to use the `debug_trace_transaction` RPC call to find the cause of a reverted tx. @@ -404,7 +427,11 @@ impl TransactionSenderInner

{ } } -impl Clone for TransactionSenderInner

{ +impl Clone for TransactionSenderInner +where + F: TxFiller, + P: Provider + Clone, +{ fn clone(&self) -> Self { Self { provider: self.provider.clone(), @@ -462,11 +489,20 @@ impl From for Error { mod tests { use super::*; use alloy::{ + network::{Ethereum, IntoWallet, Network, TransactionBuilder}, primitives::Address, - providers::{ProviderBuilder, mock::Asserter}, + providers::{ + Identity, ProviderBuilder, SendableTx, + fillers::{FillProvider, FillerControlFlow}, + mock::Asserter, + }, rpc::{json_rpc::ErrorPayload, types::trace::geth::GethTrace}, + transports::TransportResult, + }; + use connector_utils::{ + config::KmsWallet, + tests::rand::{rand_signature, rand_u256}, }; - use connector_utils::tests::rand::{rand_signature, rand_u256}; use serde::de::DeserializeOwned; use serde_json::value::RawValue; use std::fs::File; @@ -476,18 +512,26 @@ mod tests { async fn test_send_tx_out_of_gas() -> anyhow::Result<()> { // Create a mocked `alloy::Provider` let asserter = Asserter::new(); - let mock_provider = ProviderBuilder::new() - .disable_recommended_fillers() - .connect_mocked_client(asserter.clone()); + let mock_provider = NonceManagedProvider::new( + FillProvider::new( + ProviderBuilder::new() + .disable_recommended_fillers() + .connect_mocked_client(asserter.clone()), + MockFiller {}, + ), + Address::default(), + ); // Used to mock all RPC responses of transaction sending operation let test_data_dir = test_data_dir(); let estimate_gas: usize = parse_mock(&format!("{test_data_dir}/1_estimate_gas.json"))?; + let nonce: String = parse_mock(&format!("{test_data_dir}/2_get_nonce.json"))?; let send_tx_sync: TransactionReceipt = - parse_mock(&format!("{test_data_dir}/2_send_tx_sync.json"))?; + parse_mock(&format!("{test_data_dir}/3_send_tx_sync.json"))?; let debug_trace_tx: GethTrace = - parse_mock(&format!("{test_data_dir}/3_debug_trace_tx.json"))?; + parse_mock(&format!("{test_data_dir}/4_debug_trace_tx.json"))?; asserter.push_success(&estimate_gas); + asserter.push_success(&nonce); asserter.push_success(&send_tx_sync); asserter.push_success(&debug_trace_tx); @@ -499,10 +543,11 @@ mod tests { TransactionSenderInnerConfig { tx_retries: 1, trace_reverted_tx: true, + gas_multiplier_percent: 105, ..Default::default() }, ); - let error = inner_sender + inner_sender .send_to_gateway(KmsResponse::UserDecryption(UserDecryptionResponse { decryption_id: rand_u256(), user_decrypted_shares: vec![], @@ -511,23 +556,17 @@ mod tests { })) .await .unwrap_err(); - match error { - Error::Recoverable(error_msg) => { - assert!( - error_msg - .to_string() - .contains("Failed to send response to the Gateway: out of gas") - ); - } - _ => panic!("Unexpected error type"), - } + logs_contain("out of gas"); Ok(()) } #[tokio::test] async fn test_disable_reverted_tx_tracing() { let asserter = Asserter::new(); - let mock_provider = ProviderBuilder::new().connect_mocked_client(asserter.clone()); + let mock_provider = NonceManagedProvider::new( + ProviderBuilder::new().connect_mocked_client(asserter.clone()), + Address::default(), + ); let inner_sender = TransactionSenderInner::new( mock_provider.clone(), DecryptionInstance::new(Address::default(), mock_provider.clone()), @@ -540,7 +579,7 @@ mod tests { let test_data_dir = test_data_dir(); let send_tx_sync: TransactionReceipt = - parse_mock(&format!("{test_data_dir}/2_send_tx_sync.json")).unwrap(); + parse_mock(&format!("{test_data_dir}/3_send_tx_sync.json")).unwrap(); let result = inner_sender .get_revert_reason(&send_tx_sync) @@ -555,9 +594,15 @@ mod tests { async fn test_error_decryption_not_requested() -> anyhow::Result<()> { // Create a mocked `alloy::Provider` let asserter = Asserter::new(); - let mock_provider = ProviderBuilder::new() - .disable_recommended_fillers() - .connect_mocked_client(asserter.clone()); + let mock_provider = NonceManagedProvider::new( + FillProvider::new( + ProviderBuilder::new() + .disable_recommended_fillers() + .connect_mocked_client(asserter.clone()), + MockFiller {}, + ), + Address::default(), + ); // Used to mock all RPC responses of transaction sending operation let estimate_gas: usize = 21000; @@ -603,9 +648,15 @@ mod tests { async fn test_error_not_kms_tx_sender() -> anyhow::Result<()> { // Create a mocked `alloy::Provider` let asserter = Asserter::new(); - let mock_provider = ProviderBuilder::new() - .disable_recommended_fillers() - .connect_mocked_client(asserter.clone()); + let mock_provider = NonceManagedProvider::new( + FillProvider::new( + ProviderBuilder::new() + .disable_recommended_fillers() + .connect_mocked_client(asserter.clone()), + MockFiller {}, + ), + Address::default(), + ); // Used to mock all RPC responses of transaction sending operation let estimate_gas: usize = 21000; @@ -651,9 +702,15 @@ mod tests { async fn test_error_not_kms_signer() -> anyhow::Result<()> { // Create a mocked `alloy::Provider` let asserter = Asserter::new(); - let mock_provider = ProviderBuilder::new() - .disable_recommended_fillers() - .connect_mocked_client(asserter.clone()); + let mock_provider = NonceManagedProvider::new( + FillProvider::new( + ProviderBuilder::new() + .disable_recommended_fillers() + .connect_mocked_client(asserter.clone()), + Identity, + ), + Address::default(), + ); // Used to mock all RPC responses of transaction sending operation let estimate_gas: usize = 21000; @@ -701,4 +758,66 @@ mod tests { fn test_data_dir() -> String { format!("{}/tests/data/tx_out_of_gas", env!("CARGO_MANIFEST_DIR")) } + + /// A filler that mocks gas estimation and signing of the transactions + #[derive(Clone, Debug)] + struct MockFiller; + + impl TxFiller for MockFiller { + type Fillable = (); + + fn status(&self, tx: &::TransactionRequest) -> FillerControlFlow { + if tx.from().is_none() { + return FillerControlFlow::Ready; + } + + match tx.complete_preferred() { + Ok(_) => FillerControlFlow::Ready, + Err(e) => FillerControlFlow::Missing(vec![("Wallet", e)]), + } + } + + fn fill_sync(&self, _tx: &mut SendableTx) {} + + async fn prepare

( + &self, + _provider: &P, + _tx: &::TransactionRequest, + ) -> TransportResult + where + P: Provider, + { + Ok(()) + } + + async fn fill( + &self, + _fillable: Self::Fillable, + tx: SendableTx, + ) -> TransportResult> { + let mut builder = match tx { + SendableTx::Builder(builder) => builder, + _ => return Ok(tx), + }; + + let chain_id = 54321; + let wallet = KmsWallet::from_private_key_str( + "0x3f45b129a7fd099146e9fe63851a71646231f7743c712695f3b2d2bf0e41c774", + Some(chain_id), + ) + .unwrap() + .into_wallet(); + builder.set_gas_limit(21000); + builder.set_max_fee_per_gas(10); + builder.set_max_priority_fee_per_gas(10); + builder.set_chain_id(chain_id); + builder.set_nonce(0); + let envelope = builder + .build(&wallet) + .await + .map_err(RpcError::local_usage)?; + + Ok(SendableTx::Envelope(envelope)) + } + } } diff --git a/kms-connector/crates/tx-sender/tests/data/tx_out_of_gas/2_get_nonce.json b/kms-connector/crates/tx-sender/tests/data/tx_out_of_gas/2_get_nonce.json new file mode 100644 index 000000000..4efe5f7a5 --- /dev/null +++ b/kms-connector/crates/tx-sender/tests/data/tx_out_of_gas/2_get_nonce.json @@ -0,0 +1 @@ +"0x0000000000000000" diff --git a/kms-connector/crates/tx-sender/tests/data/tx_out_of_gas/3_debug_trace_tx.json b/kms-connector/crates/tx-sender/tests/data/tx_out_of_gas/3_debug_trace_tx.json deleted file mode 100644 index a7220a1f6..000000000 --- a/kms-connector/crates/tx-sender/tests/data/tx_out_of_gas/3_debug_trace_tx.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "afterEVMTransfers": [ - { - "from": null, - "purpose": "gasRefund", - "to": "0x3A096216be48faa58685C0b8799bFE6a40e684a8", - "value": "0x3cad910480" - }, - { - "from": null, - "purpose": "feeCollection", - "to": "0x252431E84D5E22435A0c833C2220770c52F59633", - "value": "0xf687a210600" - }, - { - "from": null, - "purpose": "feeCollection", - "to": "0xa4B00000000000000000000000000000000000F6", - "value": "0x0" - } - ], - "beforeEVMTransfers": [ - { - "from": "0x3A096216be48faa58685C0b8799bFE6a40e684a8", - "purpose": "feePayment", - "to": null, - "value": "0xfa527b20a80" - } - ], - "calls": [ - { - "calls": [ - { - "calls": [ - { - "from": "0xe5a04febdc29d52f552a2bd008c3eae1621f0b78", - "gas": "0x182f1a", - "gasUsed": "0xa35", - "input": "0xc62752580000000000000000000000003a096216be48faa58685c0b8799bfe6a40e684a8", - "to": "0xa21467f72d0277e8628ef06b5b155529e6ff3650", - "type": "DELEGATECALL", - "value": "0x0" - } - ], - "from": "0x9001d3b2eba4a79ff34b6b28010e8cac171e2c06", - "gas": "0x18a453", - "gasUsed": "0x1d4f", - "input": "0xc62752580000000000000000000000003a096216be48faa58685c0b8799bfe6a40e684a8", - "to": "0xe5a04febdc29d52f552a2bd008c3eae1621f0b78", - "type": "STATICCALL" - }, - { - "from": "0x9001d3b2eba4a79ff34b6b28010e8cac171e2c06", - "gas": "0x1757bc", - "gasUsed": "0xbb8", - "input": "0x32a1ecee84d72b993baf849e434001baabfc17ad9ce041a3bd2f04b4e7da6715000000000000000000000000000000000000000000000000000000000000001b7029bb8482072e2191fab6c995154615acf382413684eb67ae40c82a9f8eb54667a21fff4a1304dd0cb78c6947f0e6cb90a7318974e9712551349c4169e72ac5", - "output": "0x00000000000000000000000096c26a8ea8c4407cdfb70b979a56613f47c1b34c", - "to": "0x0000000000000000000000000000000000000001", - "type": "STATICCALL" - }, - { - "calls": [ - { - "from": "0xe5a04febdc29d52f552a2bd008c3eae1621f0b78", - "gas": "0x16eb33", - "gasUsed": "0xa61", - "input": "0x6c88eb4300000000000000000000000096c26a8ea8c4407cdfb70b979a56613f47c1b34c", - "to": "0xa21467f72d0277e8628ef06b5b155529e6ff3650", - "type": "DELEGATECALL", - "value": "0x0" - } - ], - "from": "0x9001d3b2eba4a79ff34b6b28010e8cac171e2c06", - "gas": "0x1749b4", - "gasUsed": "0xbe7", - "input": "0x6c88eb4300000000000000000000000096c26a8ea8c4407cdfb70b979a56613f47c1b34c", - "to": "0xe5a04febdc29d52f552a2bd008c3eae1621f0b78", - "type": "STATICCALL" - }, - { - "calls": [ - { - "from": "0xe5a04febdc29d52f552a2bd008c3eae1621f0b78", - "gas": "0x5dd0a", - "gasUsed": "0x962", - "input": "0xc2b42986", - "output": "0x0000000000000000000000000000000000000000000000000000000000000009", - "to": "0xa21467f72d0277e8628ef06b5b155529e6ff3650", - "type": "DELEGATECALL", - "value": "0x0" - } - ], - "from": "0x9001d3b2eba4a79ff34b6b28010e8cac171e2c06", - "gas": "0x5f63a", - "gasUsed": "0xae8", - "input": "0xc2b42986", - "output": "0x0000000000000000000000000000000000000000000000000000000000000009", - "to": "0xe5a04febdc29d52f552a2bd008c3eae1621f0b78", - "type": "STATICCALL" - } - ], - "error": "out of gas", - "from": "0x9001d3b2eba4a79ff34b6b28010e8cac171e2c06", - "gas": "0x191745", - "gasUsed": "0x191745", - "input": "0x046f9eb3000000000000000000000000000000000000000000000000000000000000107e0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000062000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000005692900000000000000210000000000000002f31b141b29a3ebcaca03ea5c556df3098a0fd7652d923890f6626b0fe78003932000000000000000b388a2a4eb274e6ada789fe46802390f08c9773793d300f2aec6399a11fb82e9010000000000000005000000c804000000000000c3c0bcca6401c79e6b33de0b000300000000000028db07921463ba7581f7dce38f7f494e38e94481e0db132ff668d23eec613dbf04632bc7f686ef1fba5caa8d5ac90f503001628ba3d64f4a4d2cbf76688ade522e0bef3a4ecd723bf9d1590f86a82a744e5cda9f9356d72e8d349ebc0783bb3c798f1298f74337f0eebff9a43d22b6e030f6511a1007900e8a7b68a3cc3bcebb2ef6441dcba276dc68b32b57d08f3a127f221270446b3472abcf9b9f0703aad0d19e8d628ebc9b6c80d78dfab2727b40f2cdc568a5945107f998f14d80edd289ee9bd54bafae87def5ca4d1699c550bafa245d4d1f014641e0e2c4afa85a83a69b387f00461820de8295a8e433c321a6887c898e4546ab3044ed83f4ee308a6be64cf8054c8e201f951800753aa2c187a683a25ff3e63e4e6ba9ed20e336268ceae1302e32cd46623c8c1c7004929d812e189c82ef42ce978f07a0660016c4582e072acc12a79a77e284c88229e2e144123812db8d942ce8b2c185a231c58da2ff8d11e934f81b54b933eacc6367e73b3ac09cdad6b1443ae81f27287802961b80888603920205d083038e42332dd0444c8e63bf76a680cf805fada4b5c75ffa3fc620dac83e9f270dbc6a1b7f32f4ae616dea2747690443509dbd495d801e69e13b8415c5a328b858a42b00aa8839d7ac155dfd36a20551205194b9e4b3639c0297d55230a64db6f26e94a375a22e8627c5ce06ef79111a110509bb15e5fa77addd52bc7149f8d3d14ef07d71b79be759e4d1a029149e93036f2f0a869a15d87b91d43b3d50a4ee8642e505e02eb76ff90c775e6c53841d75ba9dd5649971895e3ad5d70b1db4a35bdabf407b78dd602b69610b984ec51f24cae9a139f0c7621a8b06e11770f7f755cd8ccc495f9a4352f64e3d25019dac9b6c1769250ca4bf4732597f880d596a3c4a932809e1551ea958421a7f0a23fccfbfb46935fd1093110d03b635c4b398337e3aca84d8bd9f6f343f837c0f217664c2f6b4de9b2d54bd8c142ec3df6a77d14bfc0b15fbcbb4ba67a95a9e1ee4b334ebc35fe5d03b02666542110b296e0b7f9481aaf4aca23e12134ff845c03e2f880dc6f098e43d84ac01000000000000dd87fb8628456c46232eb0809cfb104df5da681149a4ccc66e3d0f437577624d91168491c4291b0e1e87c68e4916f21eaa63ff696fa1af20c3fea56b33391c5c6a034930ed6019b744c58291e210e4a5bc349edf631f63e2741fa1c2013631e671744e28ef95594d04a028f0ce8c8b500dad3774f480bb7244b150f1e052cdc9c0c1c1295c64320bef278f92cfe91b6e25b2a379b96fcbd108a7b4fd6071c90129dbf2e25a8235c2e15a9dbc15475ca63cb406de0ebb59a422d32be895bd01e068724d25b4b29cd8176e44fe8ea206e9af364679f6103f08d56ca68de8942a95aa2deb3de49fbfef589a789e90a82fc7eae6be80e65eaa1e823731330920730e2d477f49ba68ce838cac7abab645aecd0daa3b98f77d70537b2e6988cdd169903b05caaef5ffea7d415199260cc92f0a8c89891b118e39c19434c78445079d32d6fb51828c4bb0ac6a48b7f1a453344baffb7e3b3ca1f66864282dee94fc5e62abde599f73135de583f44d9dfbe9e314e80e5ef3954e05f28201083fcdfa9ce35faed3c2fd4df869261aabd2d263abc9b24fbe27a6aea177f3e9a5463407618d6dfcc32086ee7f98329101682000000000000000e3d28f32ca8844120138ad904cc69480dfac59dca4ff0000000000aa36a70500020000000200000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417029bb8482072e2191fab6c995154615acf382413684eb67ae40c82a9f8eb54667a21fff4a1304dd0cb78c6947f0e6cb90a7318974e9712551349c4169e72ac51b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "to": "0xe546c797176d0851f46ee1804b59a91708bafa25", - "type": "DELEGATECALL", - "value": "0x0" - } - ], - "error": "execution reverted", - "from": "0x3a096216be48faa58685c0b8799bfe6a40e684a8", - "gas": "0x1a3f89", - "gasUsed": "0x19d9bc", - "input": "0x046f9eb3000000000000000000000000000000000000000000000000000000000000107e0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000062000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000005692900000000000000210000000000000002f31b141b29a3ebcaca03ea5c556df3098a0fd7652d923890f6626b0fe78003932000000000000000b388a2a4eb274e6ada789fe46802390f08c9773793d300f2aec6399a11fb82e9010000000000000005000000c804000000000000c3c0bcca6401c79e6b33de0b000300000000000028db07921463ba7581f7dce38f7f494e38e94481e0db132ff668d23eec613dbf04632bc7f686ef1fba5caa8d5ac90f503001628ba3d64f4a4d2cbf76688ade522e0bef3a4ecd723bf9d1590f86a82a744e5cda9f9356d72e8d349ebc0783bb3c798f1298f74337f0eebff9a43d22b6e030f6511a1007900e8a7b68a3cc3bcebb2ef6441dcba276dc68b32b57d08f3a127f221270446b3472abcf9b9f0703aad0d19e8d628ebc9b6c80d78dfab2727b40f2cdc568a5945107f998f14d80edd289ee9bd54bafae87def5ca4d1699c550bafa245d4d1f014641e0e2c4afa85a83a69b387f00461820de8295a8e433c321a6887c898e4546ab3044ed83f4ee308a6be64cf8054c8e201f951800753aa2c187a683a25ff3e63e4e6ba9ed20e336268ceae1302e32cd46623c8c1c7004929d812e189c82ef42ce978f07a0660016c4582e072acc12a79a77e284c88229e2e144123812db8d942ce8b2c185a231c58da2ff8d11e934f81b54b933eacc6367e73b3ac09cdad6b1443ae81f27287802961b80888603920205d083038e42332dd0444c8e63bf76a680cf805fada4b5c75ffa3fc620dac83e9f270dbc6a1b7f32f4ae616dea2747690443509dbd495d801e69e13b8415c5a328b858a42b00aa8839d7ac155dfd36a20551205194b9e4b3639c0297d55230a64db6f26e94a375a22e8627c5ce06ef79111a110509bb15e5fa77addd52bc7149f8d3d14ef07d71b79be759e4d1a029149e93036f2f0a869a15d87b91d43b3d50a4ee8642e505e02eb76ff90c775e6c53841d75ba9dd5649971895e3ad5d70b1db4a35bdabf407b78dd602b69610b984ec51f24cae9a139f0c7621a8b06e11770f7f755cd8ccc495f9a4352f64e3d25019dac9b6c1769250ca4bf4732597f880d596a3c4a932809e1551ea958421a7f0a23fccfbfb46935fd1093110d03b635c4b398337e3aca84d8bd9f6f343f837c0f217664c2f6b4de9b2d54bd8c142ec3df6a77d14bfc0b15fbcbb4ba67a95a9e1ee4b334ebc35fe5d03b02666542110b296e0b7f9481aaf4aca23e12134ff845c03e2f880dc6f098e43d84ac01000000000000dd87fb8628456c46232eb0809cfb104df5da681149a4ccc66e3d0f437577624d91168491c4291b0e1e87c68e4916f21eaa63ff696fa1af20c3fea56b33391c5c6a034930ed6019b744c58291e210e4a5bc349edf631f63e2741fa1c2013631e671744e28ef95594d04a028f0ce8c8b500dad3774f480bb7244b150f1e052cdc9c0c1c1295c64320bef278f92cfe91b6e25b2a379b96fcbd108a7b4fd6071c90129dbf2e25a8235c2e15a9dbc15475ca63cb406de0ebb59a422d32be895bd01e068724d25b4b29cd8176e44fe8ea206e9af364679f6103f08d56ca68de8942a95aa2deb3de49fbfef589a789e90a82fc7eae6be80e65eaa1e823731330920730e2d477f49ba68ce838cac7abab645aecd0daa3b98f77d70537b2e6988cdd169903b05caaef5ffea7d415199260cc92f0a8c89891b118e39c19434c78445079d32d6fb51828c4bb0ac6a48b7f1a453344baffb7e3b3ca1f66864282dee94fc5e62abde599f73135de583f44d9dfbe9e314e80e5ef3954e05f28201083fcdfa9ce35faed3c2fd4df869261aabd2d263abc9b24fbe27a6aea177f3e9a5463407618d6dfcc32086ee7f98329101682000000000000000e3d28f32ca8844120138ad904cc69480dfac59dca4ff0000000000aa36a70500020000000200000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417029bb8482072e2191fab6c995154615acf382413684eb67ae40c82a9f8eb54667a21fff4a1304dd0cb78c6947f0e6cb90a7318974e9712551349c4169e72ac51b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "to": "0x9001d3b2eba4a79ff34b6b28010e8cac171e2c06", - "type": "CALL", - "value": "0x0" -} \ No newline at end of file diff --git a/kms-connector/crates/tx-sender/tests/data/tx_out_of_gas/2_send_tx_sync.json b/kms-connector/crates/tx-sender/tests/data/tx_out_of_gas/3_send_tx_sync.json similarity index 99% rename from kms-connector/crates/tx-sender/tests/data/tx_out_of_gas/2_send_tx_sync.json rename to kms-connector/crates/tx-sender/tests/data/tx_out_of_gas/3_send_tx_sync.json index b122f9abd..7d92629bd 100644 --- a/kms-connector/crates/tx-sender/tests/data/tx_out_of_gas/2_send_tx_sync.json +++ b/kms-connector/crates/tx-sender/tests/data/tx_out_of_gas/3_send_tx_sync.json @@ -15,4 +15,4 @@ "transactionHash": "0xcea4d92c0c8cae10ecb2384cb807e5e3852576de83ff3e10c8b579d8021cd684", "transactionIndex": "0x1", "type": "0x2" -} \ No newline at end of file +} diff --git a/kms-connector/crates/tx-sender/tests/data/tx_out_of_gas/4_debug_trace_tx.json b/kms-connector/crates/tx-sender/tests/data/tx_out_of_gas/4_debug_trace_tx.json new file mode 100644 index 000000000..b1c9dee84 --- /dev/null +++ b/kms-connector/crates/tx-sender/tests/data/tx_out_of_gas/4_debug_trace_tx.json @@ -0,0 +1,124 @@ +{ + "afterEVMTransfers": [ + { + "from": null, + "purpose": "gasRefund", + "to": "0x7932d5443E4e7f041394B5Ecf18e2a0F0ae1951C", + "value": "0x7f5496900" + }, + { + "from": null, + "purpose": "feeCollection", + "to": "0x252431E84D5E22435A0c833C2220770c52F59633", + "value": "0x23d5312c680" + }, + { + "from": null, + "purpose": "feeCollection", + "to": "0xa4B00000000000000000000000000000000000F6", + "value": "0x1d4a43aa00" + } + ], + "beforeEVMTransfers": [ + { + "from": "0x7932d5443E4e7f041394B5Ecf18e2a0F0ae1951C", + "purpose": "feePayment", + "to": null, + "value": "0x262929fd980" + } + ], + "calls": [ + { + "calls": [ + { + "calls": [ + { + "from": "0x3e9f8c51f9cb989b0a3c8d7c6cb626e685fa4508", + "gas": "0x318f9", + "gasUsed": "0xa5b", + "input": "0xe5275eaf0000000000000000000000007932d5443e4e7f041394b5ecf18e2a0f0ae1951c", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0x9c2d8e80f0321ffac144ef1c65a4fd94b83df0bc", + "type": "DELEGATECALL", + "value": "0x0" + } + ], + "from": "0xf5c5b8a094ad68ad2696d53fcb54b1313011dedc", + "gas": "0x33883", + "gasUsed": "0x1d78", + "input": "0xe5275eaf0000000000000000000000007932d5443e4e7f041394b5ecf18e2a0f0ae1951c", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0x3e9f8c51f9cb989b0a3c8d7c6cb626e685fa4508", + "type": "STATICCALL" + }, + { + "from": "0xf5c5b8a094ad68ad2696d53fcb54b1313011dedc", + "gas": "0x2f54f", + "gasUsed": "0xbb8", + "input": "0x2ac29bc47041b2b5b925542a518a27ac6d0ed37614c40dda20827427e50aa0bd000000000000000000000000000000000000000000000000000000000000001b4b3d58876903e7a0ba7dadf7cb87ef9f3bed4815ce1472915b61b93a72a10649758f58588ca0ef7b309573739685600c8e0d74aaa813f585e9596e335a7367a6", + "output": "0x000000000000000000000000611388e56c0c93c9a11a91904a359d5224804ef2", + "to": "0x0000000000000000000000000000000000000001", + "type": "STATICCALL" + }, + { + "calls": [ + { + "from": "0x3e9f8c51f9cb989b0a3c8d7c6cb626e685fa4508", + "gas": "0x2dabc", + "gasUsed": "0xa47", + "input": "0x203d0114000000000000000000000000611388e56c0c93c9a11a91904a359d5224804ef2", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0x9c2d8e80f0321ffac144ef1c65a4fd94b83df0bc", + "type": "DELEGATECALL", + "value": "0x0" + } + ], + "from": "0xf5c5b8a094ad68ad2696d53fcb54b1313011dedc", + "gas": "0x2e7b5", + "gasUsed": "0xbd0", + "input": "0x203d0114000000000000000000000000611388e56c0c93c9a11a91904a359d5224804ef2", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0x3e9f8c51f9cb989b0a3c8d7c6cb626e685fa4508", + "type": "STATICCALL" + }, + { + "calls": [ + { + "from": "0x3e9f8c51f9cb989b0a3c8d7c6cb626e685fa4508", + "gas": "0x27801", + "gasUsed": "0x3ba4", + "input": "0xe3b2a8740000000000000000000000007932d5443e4e7f041394b5ecf18e2a0f0ae1951c", + "output": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000007932d5443e4e7f041394b5ecf18e2a0f0ae1951c000000000000000000000000611388e56c0c93c9a11a91904a359d5224804ef2000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a68747470733a2f2f7a616d612d7a77732d6465762d746b6d732d62367138372e73332e65752d776573742d312e616d617a6f6e6177732e636f6d000000000000", + "to": "0x9c2d8e80f0321ffac144ef1c65a4fd94b83df0bc", + "type": "DELEGATECALL", + "value": "0x0" + } + ], + "from": "0xf5c5b8a094ad68ad2696d53fcb54b1313011dedc", + "gas": "0x28369", + "gasUsed": "0x3d57", + "input": "0xe3b2a8740000000000000000000000007932d5443e4e7f041394b5ecf18e2a0f0ae1951c", + "output": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000007932d5443e4e7f041394b5ecf18e2a0f0ae1951c000000000000000000000000611388e56c0c93c9a11a91904a359d5224804ef2000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a68747470733a2f2f7a616d612d7a77732d6465762d746b6d732d62367138372e73332e65752d776573742d312e616d617a6f6e6177732e636f6d000000000000", + "to": "0x3e9f8c51f9cb989b0a3c8d7c6cb626e685fa4508", + "type": "STATICCALL" + } + ], + "error": "out of gas", + "from": "0xf5c5b8a094ad68ad2696d53fcb54b1313011dedc", + "gas": "0x352fd", + "gasUsed": "0x352fd", + "input": "0x629787870500000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000020ff1479c7d0140b27ec25fb97a0c3c4ab63885361ccf0919b2ea2b2c5a8414e2b00000000000000000000000000000000000000000000000000000000000000414b3d58876903e7a0ba7dadf7cb87ef9f3bed4815ce1472915b61b93a72a10649758f58588ca0ef7b309573739685600c8e0d74aaa813f585e9596e335a7367a61b00000000000000000000000000000000000000000000000000000000000000", + "to": "0x96cf9a038b75a074e37f17fbd6faeef477523634", + "type": "DELEGATECALL", + "value": "0x0" + } + ], + "error": "execution reverted", + "from": "0x7932d5443e4e7f041394b5ecf18e2a0f0ae1951c", + "gas": "0x4005f", + "gasUsed": "0x3f305", + "input": "0x629787870500000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000020ff1479c7d0140b27ec25fb97a0c3c4ab63885361ccf0919b2ea2b2c5a8414e2b00000000000000000000000000000000000000000000000000000000000000414b3d58876903e7a0ba7dadf7cb87ef9f3bed4815ce1472915b61b93a72a10649758f58588ca0ef7b309573739685600c8e0d74aaa813f585e9596e335a7367a61b00000000000000000000000000000000000000000000000000000000000000", + "to": "0xf5c5b8a094ad68ad2696d53fcb54b1313011dedc", + "type": "CALL", + "value": "0x0" +} diff --git a/kms-connector/crates/tx-sender/tests/integration_tests.rs b/kms-connector/crates/tx-sender/tests/integration_tests.rs index efbb9c6b4..a07de70cb 100644 --- a/kms-connector/crates/tx-sender/tests/integration_tests.rs +++ b/kms-connector/crates/tx-sender/tests/integration_tests.rs @@ -340,7 +340,7 @@ async fn start_test_tx_sender( DbKmsResponsePicker::connect(test_instance.db().clone(), &Config::default().await).await?; let response_remover = DbKmsResponseRemover::new(test_instance.db().clone()); let provider = connect_to_gateway_with_wallet( - &test_instance.anvil_ws_endpoint(), + test_instance.anvil_http_endpoint().as_str(), *CHAIN_ID as u64, KmsWallet::from_private_key_str(DEPLOYER_PRIVATE_KEY, Some(*CHAIN_ID as u64))?, ) diff --git a/kms-connector/crates/utils/src/conn.rs b/kms-connector/crates/utils/src/conn.rs index a58bdac13..ce28e15a2 100644 --- a/kms-connector/crates/utils/src/conn.rs +++ b/kms-connector/crates/utils/src/conn.rs @@ -5,16 +5,17 @@ use crate::{ use alloy::{ network::EthereumWallet, providers::{ - Identity, ProviderBuilder, ProviderLayer, RootProvider, WsConnect, + Identity, ProviderBuilder, ProviderLayer, RootProvider, fillers::{ BlobGasFiller, ChainIdFiller, FillProvider, GasFiller, JoinFill, NonceFiller, TxFiller, WalletFiller, }, }, + transports::http::reqwest::Url, }; use anyhow::anyhow; use sqlx::{Pool, Postgres, postgres::PgPoolOptions}; -use std::{sync::Once, time::Duration}; +use std::{str::FromStr, sync::Once, time::Duration}; use tracing::{info, warn}; /// The number of connection retry to connect to the database or the Gateway RPC node. @@ -54,14 +55,10 @@ type DefaultFillers = JoinFill< pub type GatewayProvider = FillProvider, RootProvider>; /// The default `alloy::Provider` used to interact with the Gateway using a wallet. -pub type WalletGatewayProvider = NonceManagedProvider< - FillProvider< - JoinFill< - JoinFill, FillersWithoutNonceManagement>, - WalletFiller, - >, - RootProvider, - >, +pub type WalletGatewayProvider = NonceManagedProvider; +pub type WalletGatewayProviderFillers = JoinFill< + JoinFill, FillersWithoutNonceManagement>, + WalletFiller, >; /// Tries to establish the connection with a RPC node of the Gateway. @@ -108,23 +105,11 @@ where .unwrap() }); - for i in 1..=CONNECTION_RETRY_NUMBER { - info!("Attempting connection to Gateway... ({i}/{CONNECTION_RETRY_NUMBER})"); - - let ws_endpoint = WsConnect::new(gateway_url); - match provider_builder_new().connect_ws(ws_endpoint).await { - Ok(provider) => { - info!("Connected to Gateway's RPC node successfully"); - return Ok(provider); - } - Err(e) => warn!("Gateway connection attempt #{i} failed: {e}"), - } - - if i != CONNECTION_RETRY_NUMBER { - tokio::time::sleep(CONNECTION_RETRY_DELAY).await; - } - } - Err(anyhow!("Could not connect to Gateway at url {gateway_url}")) + let gateway_url = + Url::from_str(gateway_url).map_err(|e| anyhow!("Invalid Gateway URL: {e}"))?; + let provider = provider_builder_new().connect_http(gateway_url); + info!("Connected to Gateway's RPC node successfully"); + Ok(provider) } static INSTALL_CRYPTO_PROVIDER_ONCE: Once = Once::new(); diff --git a/kms-connector/crates/utils/src/provider.rs b/kms-connector/crates/utils/src/provider.rs index a8ffc4f91..a2970e7cc 100644 --- a/kms-connector/crates/utils/src/provider.rs +++ b/kms-connector/crates/utils/src/provider.rs @@ -1,7 +1,7 @@ use alloy::{ consensus::Account, - eips::{BlockId, BlockNumberOrTag}, - network::{Network, TransactionBuilder}, + eips::{BlockId, BlockNumberOrTag, Encodable2718}, + network::{Ethereum, Network, TransactionBuilder}, primitives::{ Address, B256, BlockHash, BlockNumber, Bytes, StorageKey, StorageValue, TxHash, U64, U128, U256, @@ -11,50 +11,95 @@ use alloy::{ PendingTransaction, PendingTransactionBuilder, PendingTransactionConfig, PendingTransactionError, Provider, ProviderCall, RootProvider, RpcWithBlock, SendableTx, fillers::{ - BlobGasFiller, CachedNonceManager, ChainIdFiller, GasFiller, JoinFill, NonceManager, + BlobGasFiller, CachedNonceManager, FillProvider, GasFiller, JoinFill, NonceManager, + TxFiller, }, }, rpc::{ client::NoParams, types::{ AccessListResult, Bundle, EIP1186AccountProofResponse, EthCallResponse, FeeHistory, - Filter, FilterChanges, Index, Log, SyncStatus, + Filter, FilterChanges, Index, Log, SyncStatus, TransactionReceipt, TransactionRequest, erc4337::TransactionConditional, pubsub::{Params, SubscriptionKind}, simulate::{SimulatePayload, SimulatedBlock}, }, }, - transports::TransportResult, + transports::{TransportError, TransportResult}, }; use futures::lock::Mutex; use serde_json::value::RawValue; use std::{borrow::Cow, sync::Arc}; -pub type FillersWithoutNonceManagement = - JoinFill>; +pub type FillersWithoutNonceManagement = JoinFill; /// A wrapper around an `alloy` provider that recovers its nonce manager on error. /// /// Note that the provider given by the user must not have nonce management enabled, as this /// is done by the `NonceManagedProvider` itself. /// Users can use the default `FillersWithoutNonceManagement` to create a provider. -pub struct NonceManagedProvider

{ - inner: P, +pub struct NonceManagedProvider +where + N: Network, + F: TxFiller, + P: Provider, +{ + inner: FillProvider, signer_address: Address, nonce_manager: Arc>, } -impl

NonceManagedProvider

{ - pub fn new(provider: P, signer_address: Address) -> Self { +impl NonceManagedProvider +where + F: TxFiller, + P: Provider, +{ + pub fn new(provider: FillProvider, signer_address: Address) -> Self { Self { inner: provider, signer_address, nonce_manager: Default::default(), } } + + pub async fn send_transaction_sync( + &self, + mut tx: TransactionRequest, + ) -> TransportResult { + let nonce = self + .nonce_manager + .lock() + .await + .get_next_nonce(&self.inner, self.signer_address) + .await?; + tx.set_nonce(nonce); + + let mut tx_bytes = Vec::new(); + self.inner + .fill(tx) + .await? + .try_into_envelope() + .map_err(|e| TransportError::LocalUsageError(Box::new(e)))? + .encode_2718(&mut tx_bytes); + + let res = self + .client() + .request("eth_sendRawTransactionSync", (Bytes::from(tx_bytes),)) + .await; + if res.is_err() { + // Reset the nonce manager if the transaction sending failed. + *self.nonce_manager.lock().await = Default::default(); + } + res + } } -impl Clone for NonceManagedProvider

{ +impl Clone for NonceManagedProvider +where + N: Network, + F: TxFiller, + P: Provider + Clone, +{ fn clone(&self) -> Self { Self { inner: self.inner.clone(), @@ -65,8 +110,10 @@ impl Clone for NonceManagedProvider

{ } #[async_trait::async_trait] -impl Provider for NonceManagedProvider

+impl Provider for NonceManagedProvider where + N: Network, + F: TxFiller, P: Provider, { fn root(&self) -> &RootProvider { diff --git a/kms-connector/crates/utils/src/tests/setup/gw.rs b/kms-connector/crates/utils/src/tests/setup/gw.rs index 82f87212f..6b1a347ec 100644 --- a/kms-connector/crates/utils/src/tests/setup/gw.rs +++ b/kms-connector/crates/utils/src/tests/setup/gw.rs @@ -3,11 +3,11 @@ use crate::{ conn::WalletGatewayProvider, provider::{FillersWithoutNonceManagement, NonceManagedProvider}, tests::setup::{ROOT_CARGO_TOML, pick_free_port}, - // tests::setup::{ROOT_CARGO_TOML, pick_free_port}, }; use alloy::{ primitives::{Address, ChainId, FixedBytes}, - providers::{ProviderBuilder, WsConnect}, + providers::ProviderBuilder, + transports::http::reqwest::Url, }; use fhevm_gateway_bindings::{ decryption::Decryption::{self, DecryptionInstance}, @@ -92,10 +92,7 @@ impl GatewayInstance { .with_chain_id(*CHAIN_ID as u64) .filler(FillersWithoutNonceManagement::default()) .wallet(wallet) - .connect_ws(WsConnect::new(Self::anvil_ws_endpoint_impl( - anvil_host_port, - ))) - .await?; + .connect_http(Self::anvil_http_endpoint_impl(anvil_host_port)); let provider = NonceManagedProvider::new(inner_provider, wallet_addr); Ok(GatewayInstance::new( @@ -110,12 +107,14 @@ impl GatewayInstance { Duration::from_secs(self.block_time) } - fn anvil_ws_endpoint_impl(anvil_host_port: u16) -> String { - format!("ws://localhost:{anvil_host_port}") + fn anvil_http_endpoint_impl(anvil_host_port: u16) -> Url { + format!("http://localhost:{anvil_host_port}") + .parse() + .unwrap() } - pub fn anvil_ws_endpoint(&self) -> String { - Self::anvil_ws_endpoint_impl(self.anvil_host_port) + pub fn anvil_http_endpoint(&self) -> Url { + Self::anvil_http_endpoint_impl(self.anvil_host_port) } } diff --git a/kms-connector/crates/utils/src/tests/setup/instance.rs b/kms-connector/crates/utils/src/tests/setup/instance.rs index a29a0bdd6..6ba2043b6 100644 --- a/kms-connector/crates/utils/src/tests/setup/instance.rs +++ b/kms-connector/crates/utils/src/tests/setup/instance.rs @@ -4,6 +4,7 @@ use crate::{ conn::WalletGatewayProvider, tests::setup::{CustomTestWriter, DbInstance, KmsInstance, S3Instance, gw::GatewayInstance}, }; +use alloy::transports::http::reqwest::Url; use fhevm_gateway_bindings::{ decryption::Decryption::DecryptionInstance, gateway_config::GatewayConfig::GatewayConfigInstance, @@ -109,8 +110,8 @@ impl TestInstance { self.gateway().anvil_block_time() } - pub fn anvil_ws_endpoint(&self) -> String { - self.gateway().anvil_ws_endpoint() + pub fn anvil_http_endpoint(&self) -> Url { + self.gateway().anvil_http_endpoint() } pub fn kms_container(&self) -> &ContainerAsync { diff --git a/kms-connector/crates/utils/src/tests/setup/s3.rs b/kms-connector/crates/utils/src/tests/setup/s3.rs index e5f8d42c7..fa81edba3 100644 --- a/kms-connector/crates/utils/src/tests/setup/s3.rs +++ b/kms-connector/crates/utils/src/tests/setup/s3.rs @@ -13,7 +13,8 @@ pub struct S3Instance { pub const MINIO_ACCESS_KEY: &str = "fhevm-access-key"; pub const MINIO_SECRET_KEY: &str = "fhevm-access-secret-key"; -pub const S3_CT: &str = "011e517540a10486971fbf81dcf64c1b2fc9965744d0c8f7da0e4b338f1a31a9"; +pub const S3_CT_HANDLE: &str = "5a88e7aa46f312ff70df6e84c85eb40cdfd42b18a9ff00000000000030390500"; +pub const S3_CT_DIGEST: &str = "3a002df21130bda55f78d4403a73007a797f4a888174a620bbffc9052a045239"; impl S3Instance { pub fn new(url: String, container: ContainerAsync) -> Self { @@ -57,7 +58,7 @@ impl S3Instance { mc anonymous set public myminio/kms-public && mc anonymous set public myminio/ct64 && mc anonymous set public myminio/ct128 && - mc cp /data/{S3_CT} --attr Ct-Format=uncompressed_on_cpu myminio/ct128/{S3_CT}", + mc cp /data/{S3_CT_DIGEST} --attr Ct-Format=compressed_on_cpu myminio/ct128/{S3_CT_DIGEST}", self.url ); @@ -66,11 +67,11 @@ impl S3Instance { .with_entrypoint("/bin/sh") .with_network("host") .with_copy_to( - format!("/data/{S3_CT}"), + format!("/data/{S3_CT_DIGEST}"), PathBuf::from_str(&format!( "{}/../../tests/data/{}", env!("CARGO_MANIFEST_DIR"), - S3_CT + S3_CT_DIGEST )) .unwrap(), ) diff --git a/kms-connector/tests/data/011e517540a10486971fbf81dcf64c1b2fc9965744d0c8f7da0e4b338f1a31a9 b/kms-connector/tests/data/011e517540a10486971fbf81dcf64c1b2fc9965744d0c8f7da0e4b338f1a31a9 deleted file mode 100644 index f3047a1c1..000000000 Binary files a/kms-connector/tests/data/011e517540a10486971fbf81dcf64c1b2fc9965744d0c8f7da0e4b338f1a31a9 and /dev/null differ diff --git a/kms-connector/tests/data/3a002df21130bda55f78d4403a73007a797f4a888174a620bbffc9052a045239 b/kms-connector/tests/data/3a002df21130bda55f78d4403a73007a797f4a888174a620bbffc9052a045239 new file mode 100644 index 000000000..2d9084782 Binary files /dev/null and b/kms-connector/tests/data/3a002df21130bda55f78d4403a73007a797f4a888174a620bbffc9052a045239 differ diff --git a/package-lock.json b/package-lock.json index f30a18fbe..02a167201 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ }, "host-contracts": { "name": "@fhevm/host-contracts", - "version": "0.9.0-1", + "version": "0.9.0-2", "license": "BSD-3-Clause", "dependencies": { "encrypted-types": "^0.0.4" diff --git a/test-suite/fhevm/env/staging/.env.kms-connector b/test-suite/fhevm/env/staging/.env.kms-connector index c9c4c88bd..76c3c8e3e 100644 --- a/test-suite/fhevm/env/staging/.env.kms-connector +++ b/test-suite/fhevm/env/staging/.env.kms-connector @@ -11,7 +11,7 @@ DATABASE_URL="postgresql://db:5432/kms-connector" # ============================================================================= KMS_CONNECTOR_DATABASE_URL="postgresql://db:5432/kms-connector" KMS_CONNECTOR_DATABASE_POOL_SIZE="10" -KMS_CONNECTOR_GATEWAY_URL=ws://gateway-node:8546 +KMS_CONNECTOR_GATEWAY_URL=http://gateway-node:8546 KMS_CONNECTOR_KMS_CORE_ENDPOINTS=http://kms-core:50051 KMS_CONNECTOR_CHAIN_ID=54321 OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4317 @@ -23,6 +23,7 @@ KMS_CONNECTOR_DECRYPTION_POLLING_MS=200 KMS_CONNECTOR_KEY_MANAGEMENT_POLLING_MS=7000 KMS_CONNECTOR_PUBLIC_DECRYPTION_TIMEOUT_SECS=300 KMS_CONNECTOR_USER_DECRYPTION_TIMEOUT_SECS=300 +KMS_CONNECTOR_GAS_MULTIPLIER_PERCENT=115 KMS_CONNECTOR_RETRY_INTERVAL_SECS=5 KMS_CONNECTOR_VERIFY_COPROCESSORS=true diff --git a/test-suite/fhevm/fhevm-cli b/test-suite/fhevm/fhevm-cli index accf57e41..14ba1886a 100755 --- a/test-suite/fhevm/fhevm-cli +++ b/test-suite/fhevm/fhevm-cli @@ -16,29 +16,31 @@ PROJECT="fhevm" # Default versions for the fhevm stack. +# Gateway and Host contracts. +export GATEWAY_VERSION=${GATEWAY_VERSION:-"v0.9.1-1"} +export HOST_VERSION=${HOST_VERSION:-"v0.9.1-1"} + # KMS connector services. -export CONNECTOR_DB_MIGRATION_VERSION=${CONNECTOR_DB_MIGRATION_VERSION:-"v0.9.0-4"} -export CONNECTOR_GW_LISTENER_VERSION=${CONNECTOR_GW_LISTENER_VERSION:-"v0.9.0-4"} -export CONNECTOR_KMS_WORKER_VERSION=${CONNECTOR_KMS_WORKER_VERSION:-"v0.9.0-4"} -export CONNECTOR_TX_SENDER_VERSION=${CONNECTOR_TX_SENDER_VERSION:-"v0.9.0-4"} +export CONNECTOR_DB_MIGRATION_VERSION=${CONNECTOR_DB_MIGRATION_VERSION:-"v0.9.1-1"} +export CONNECTOR_GW_LISTENER_VERSION=${CONNECTOR_GW_LISTENER_VERSION:-"v0.9.1-1"} +export CONNECTOR_KMS_WORKER_VERSION=${CONNECTOR_KMS_WORKER_VERSION:-"v0.9.1-1"} +export CONNECTOR_TX_SENDER_VERSION=${CONNECTOR_TX_SENDER_VERSION:-"v0.9.1-1"} # Coprocessor services. -export DB_MIGRATION_VERSION=${DB_MIGRATION_VERSION:-"v0.9.0-4"} -export GW_LISTENER_VERSION=${GW_LISTENER_VERSION:-"v0.9.0-4"} -export HOST_LISTENER_VERSION=${HOST_LISTENER_VERSION:-"v0.9.0-4"} -export TX_SENDER_VERSION=${TX_SENDER_VERSION:-"v0.9.0-4"} -export TFHE_WORKER_VERSION=${TFHE_WORKER_VERSION:-"v0.9.0-4"} -export SNS_WORKER_VERSION=${SNS_WORKER_VERSION:-"v0.9.0-4"} -export ZKPROOF_WORKER_VERSION=${ZKPROOF_WORKER_VERSION:-"v0.9.0-4"} +export DB_MIGRATION_VERSION=${DB_MIGRATION_VERSION:-"v0.9.1-1"} +export GW_LISTENER_VERSION=${GW_LISTENER_VERSION:-"5b7696f"} +export HOST_LISTENER_VERSION=${HOST_LISTENER_VERSION:-"v0.9.1-1"} +export TX_SENDER_VERSION=${TX_SENDER_VERSION:-"v0.9.1-1"} +export TFHE_WORKER_VERSION=${TFHE_WORKER_VERSION:-"v0.9.1-1"} +export SNS_WORKER_VERSION=${SNS_WORKER_VERSION:-"v0.9.1-1"} +export ZKPROOF_WORKER_VERSION=${ZKPROOF_WORKER_VERSION:-"v0.9.1-1"} -# Gateway and Host contracts. -export GATEWAY_VERSION=${GATEWAY_VERSION:-"v0.9.0-4"} -export HOST_VERSION=${HOST_VERSION:-"v0.9.0-4"} +# Test suite +export TEST_SUITE_VERSION=${TEST_SUITE_VERSION:-"v0.9.1-1"} # Other services. export CORE_VERSION=${CORE_VERSION:-"v0.12.0"} export RELAYER_VERSION=${RELAYER_VERSION:-"v0.5.0-2"} -export TEST_SUITE_VERSION=${TEST_SUITE_VERSION:-"v0.9.0-4"} function print_logo() {